Принудительное имя экспорта для статической библиотеки Visual Studio C ++ - PullRequest
1 голос
/ 15 августа 2011

У меня проблемы со связыванием статической библиотеки, которая состоит из нескольких файлов cpp в проекте, который является "чистыми" файлами C .c.Файл .c ищет объект функции с синтаксисом _FUNCTIONAME, например:

logforwarder.obj : error LNK2001: unresolved external symbol _getEventLogProviders

, но файл .lib экспортирует его так: Дамп файла M: ... \ Release \ recvevent.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  ?_getEventLogProviders@@YAIPAPAD@Z (unsigned int __cdecl _getE
ventLogProviders(char * *))

  Summary

          C3 .debug$S
          14 .idata$2
          14 .idata$3
           4 .idata$4
           4 .idata$5
           C .idata$6

Мой файл exports.def выглядит следующим образом:

EXPORTS
 getEventLogProviders=getEventLogProviders @4

Библиотека, которую проект может успешно связать, экспортирует функции следующим образом:

Dump of file M:\...\screenshot.lib

File Type: LIBRARY

     Exports

       ordinal    name

                  _ReflectiveLoader@4

Что я делаю не так?

1 Ответ

2 голосов
/ 15 августа 2011

Декорация добавляет как подчеркивание в начале экспортируемой функции, так и @ с номером в конце. Ваш файл .def должен выглядеть следующим образом:

getEventLogProviders=_getEventLogProviders@4

Как и сейчас, .def не имеет никакого эффекта, так как искаженная функция написана неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...