开发者

How can I resolve LNK4254 warnings in link.exe?

I'm trying to compile an open-source project.

One of the steps involves running a .mak file which has the following line:

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

... that becomes:

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

... and when executes, produces the following warnings:

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

I tried reading the documentation for warning LNK4254, but I don't know enough about link.exe to understand how to fix it.

The file kbddvp.def contains:

LIBRARY KBDDVP

EXPORTS
    KbdLayerDescriptor  @1

The .mak file links to this page which it seems to be based off of, and is the reason the -merge: parts are used in the first place. I realize that this page says that you can use MSKLC 1.4 instead, however it doesn't support all the features I want to implement.

How can I solve these LNK4254 warnings, or can I safely ignore them?


What happens here originally is that all sections are merged into .data, and then its attributes are set to Read, Execute.

The warnings are because the other sections' attributes are different before they are merged. However, since the new merged section .data have its attributes explicitly set, you can ignore it.

You can verify this by comparing the output of these two commands:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜