代码之家  ›  专栏  ›  技术社区  ›  Senseful

如何解决link.exe中的LNK4254警告?

  •  0
  • Senseful  · 技术社区  · 14 年前

    我是 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
    

    麦先生 this page 这似乎是基于,这是 -merge: 首先使用零件。我知道这页说你可以 MSKLC 1.4 然而,它并不支持我想要实现的所有特性。

    1 回复  |  直到 7 年前
        1
  •  2
  •   RolKau    14 年前

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

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

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