【问题标题】:How can I resolve LNK4254 warnings in link.exe?如何解决 link.exe 中的 LNK4254 警告?
【发布时间】:2010-08-01 20:42:20
【问题描述】:

我是trying to compile an open-source project

其中一个步骤涉及运行.mak 文件,该文件具有以下行:

kbddvp32.dll: kbddvp32.obj kbddvp.res
        $(LINK32) -nologo -dll -base:0x5FFF0000 -subsystem:native -def:kbddvp.def -noentry \
             -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data -merge:.bss=.data \
         -ignore:4078,4070 -section:.data,re -opt:nowin98 -stack:0x40000,0x1000 -opt:ref,icf \
         -release -out:$@ $**

...变成:

link -machine:ix86 -nologo -dll -base:0x5FFF0000 -subsystem:native -def:
kbddvp.def -noentry  -merge:.edata=.data -merge:.rdata=.data -merge:.text=.data
-merge:.bss=.data  -ignore:4078,4070 -section:.data,re -opt:nowin98 -stack:0x400
00,0x1000 -opt:ref,icf  -release -out:kbddvp32.dll kbddvp32.obj kbddvp.res

...当执行时,会产生以下警告:

LINK : warning LNK4224: /OPT:NOWIN98 is no longer supported;  ignored
   Creating library kbddvp32.lib and object kbddvp32.exp
LINK : warning LNK4254: section '.edata' (40000040) merged into '.data' (C000004
0) with different attributes
LINK : warning LNK4254: section '.rdata' (40000040) merged into '.data' (C000004
0) with different attributes
LINK : warning LNK4254: section '.text' (60000020) merged into '.data' (C0000040
) with different attributes
LINK : warning LNK4254: section '.bss' (C0000080) merged into '.data' (C0000040)
 with different attributes

我尝试阅读 documentation for warning LNK4254,但我对 link.exe 的了解不够,无法理解如何修复它。

文件kbddvp.def 包含:

LIBRARY KBDDVP

EXPORTS
    KbdLayerDescriptor  @1

.mak 文件链接到它似乎基于的this page,这也是首先使用-merge: 部分的原因。我意识到这个页面说你可以使用MSKLC 1.4,但是它不支持我想要实现的所有功能。

如何解决这些 LNK4254 警告,或者我可以安全地忽略它们?

【问题讨论】:

    标签: linker


    【解决方案1】:

    这里最初发生的事情是所有部分都合并到.data中, 然后将其属性设置为Read, Execute

    警告是因为之前其他部分的属性不同 它们被合并了。但是,由于新合并的部分 .data 具有其属性 显式设置,可以忽略。

    您可以通过比较这两个命令的输出来验证这一点:

    link /dump /section:.data kbddvp32.dll
    link /dump /section:.data kbdus.dll
    

    【讨论】:

      猜你喜欢
      • 2012-03-22
      • 2013-04-29
      • 2012-06-14
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 2014-04-22
      • 1970-01-01
      相关资源
      最近更新 更多