Какие настройки компоновщика 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

Другие вопросы по тегам