Как я могу разрешить LNK4254 предупреждения в link.exe? - PullRequest
0 голосов
/ 02 августа 2010

Я пытаюсь скомпилировать проект с открытым исходным кодом .

Один из шагов включает запуск файла .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

Я пытался прочитать документацию для предупреждения LNK4254, но я недостаточно знаю о link.exe, чтобы понять, как его исправить.

Файл kbddvp.def содержит:

LIBRARY KBDDVP

EXPORTS
    KbdLayerDescriptor  @1

Ссылки .mak на файлдо этой страницы , на которой она, кажется, основана, и является причиной того, что части -merge: используются в первую очередь.Я понимаю, что на этой странице написано, что вы можете использовать MSKLC 1.4 , но она не поддерживает все функции, которые я хочу реализовать.

Как я могу решить эти предупреждения LNK4254, или я могу их безопасно игнорировать?

1 Ответ

2 голосов
/ 13 ноября 2010

Изначально здесь происходит то, что все разделы объединяются в .data, а затем его атрибуты устанавливаются на Чтение, Выполнение .

Предупреждения, потому что атрибуты других разделов раньше они объединены. Однако, поскольку новый объединенный раздел .data имеет свои атрибуты явно установлено, вы можете игнорировать его.

Вы можете убедиться в этом, сравнив выходные данные этих двух команд:

link /dump /section:.data kbddvp32.dll
link /dump /section:.data kbdus.dll
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...