Какие настройки компоновщика Visual Studio создают имена экспорта в формате someFunction = _someFunction ("=" является ключом)
Я создаю zlib из исходного кода с помощью Visual Studio 2012. Обратите внимание, я не пометил здесь zlib просто потому, что не думаю, что этот вопрос относится к конкретному проекту.
Сборка проходит успешно, но когда я использую dumpbin /EXPORTS, результат выглядит следующим образом:
C:\Source\zlib>dumpbin /EXPORTS ./zlib1.dll
Microsoft (R) COFF/PE Dumper Version 11.00.61232.400
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file ./zlib1.dll
File Type: DLL
Section contains the following exports for zlib1.dll
00000000 characteristics
5DD6A00D time date stamp Thu Nov 21 08:32:45 2019
0.00 version
1 ordinal base
165 number of functions
119 number of names
ordinal hint RVA name
1 1 00001000 adler32
140 2 00001340 adler32_combine
2 3 00001410 compress
39 4 00001360 compress2
46 5 00001430 compressBound
Однако, когда я исследую версию, созданную кем-то другим (с использованием VC6 - не уверен, имеет ли это значение), результат выглядит так:
C:\Source\zlib-1.2.7-win32>dumpbin /EXPORTS ./zlib1.dll
Microsoft (R) COFF/PE Dumper Version 11.00.61232.400
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file ./zlib1.dll
File Type: DLL
Section contains the following exports for zlib1.dll
00000000 characteristics
509EFCCB time date stamp Sat Nov 10 19:18:03 2012
0.00 version
1 ordinal base
76 number of functions
76 number of names
ordinal hint RVA name
1 0 00001000 adler32 = _adler32
2 1 00001270 adler32_combine = _adler32_combine
3 2 00001340 adler32_combine64 = _adler32_combine64
4 3 00001400 compress = _compress
5 4 00001360 compress2 = _compress2
6 5 00001420 compressBound = _compressBound
У меня проблемы с поиском настройки Visual Studio, которая изменяет этот тип вывода. Затем я попытался просто изменить файл.def с
LIBRARY
; zlib data compression and ZIP file I/O library
VERSION 1.2
EXPORTS
adler32 @1
к
LIBRARY
; zlib data compression and ZIP file I/O library
VERSION 1.2
EXPORTS
_adler32=adler32 @1
Но это, похоже, просто переименовывает экспорт, чтобы вместо получения:
ordinal hint RVA name
1 0 00001000 adler32 = _adler32
Я получил:
ordinal hint RVA name
1 0 00001000 _adler32
и если вы поменяете их местами в файле.def, проект не будет правильно компилировать / связывать (имеет смысл).
Так есть ли в более новых (чем VC6) версиях VS параметр, который дает / EXPORTS в формате somefunc=_somefunc?
1 ответ
Согласно этому ответу ( Экспорт C++ DLL: Украшенные / искаженные имена) они должны были использоватьGenerate Debug Info = Yes