我是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警告,还是可以安全地忽略它们?
答案 0 :(得分:2)
这里最初发生的是所有部分合并为.data, 然后将其属性设置为Read, Execute。
警告是因为之前其他部分的属性不同 他们被合并了。但是,由于新合并的部分.data具有其属性 显式设置,你可以忽略它。
您可以通过比较这两个命令的输出来验证这一点:
link /dump /section:.data kbddvp32.dll
link /dump /section:.data kbdus.dll