2010-08-01 183 views
0

我是trying to compile an open-source project如何解決link.exe中的LNK4254警告?

步驟之一涉及到運行一個.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:[email protected] $** 

...變爲:

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警告,還是我可以放心地忽略它們?

回答

2

這裏最初發生的是所有部分都合併到.data, ,然後將其屬性設置爲Read, Execute

警告是因爲其他部分的屬性在 合併之前是不同的。但是,由於新的合併部分.data的屬性 已明確設置,因此您可以忽略它。

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

您可以通過比較這兩個命令的輸出來驗證