Как заставить компоновщик искать не оформленное имя в файле lib? - PullRequest
0 голосов
/ 25 марта 2019

Не найдено ответа на статическое связывание (файлы lib), но только на DLL ...

У меня есть статический lib, в котором функция, которую нужно вызвать, не оформлена (FT_CreateDeviceInfoList),Но компоновщик ищет разукрашенное имя (_FT_CreateDeviceInfoList@4).

Я не могу изменить lib, так как это третье лицо.У меня, очевидно, есть файл заголовка (ftd2xx.h, скачанный версия x64 с этого сайта )

Он должен нормально работать без изменений, насколько я понимаю,поскольку это сторонняя библиотека, предоставляемая всему миру ...

Что мне здесь не хватает?Как я могу заставить компоновщик искать необработанное имя?

Редактировать:

Глупый я ... изменил платформу на x64 в опции сборки, но теперь у меня есть другая ошибка:

Error LNK2019 unresolved external symbol __imp_printf referenced in function "int __cdecl DumpDeviceWithInfo(void *,struct _SP_DEVINFO_DATA *,char const *)" (?DumpDeviceWithInfo@@YAHPEAXPEAU_SP_DEVINFO_DATA@@PEBD@Z) poc c:\prj\poc\poc\ftd2xx.lib(devcon.obj) 1

Но я не понимаю, почему переход на x64 меняет параметр украшения / искажения.

1 Ответ

0 голосов
/ 25 марта 2019

Вам нужно добавить FTD2XX_STATIC define.Если вы посмотрите на заголовок ftd2xx.h, то увидите:

#elif defined(FTD2XX_STATIC)
// Avoid decorations when linking statically to D2XX.

Edit:

Функции, объявленные с __stdcall, получают эти декораторы во внутренних именах (см. http://wyw.dcweb.cn/stdcall.htm). Изменениеbuild to x64 изменил соглашение о вызовах - __stdcall игнорируется компилятором на процессоре x64.

Для ошибки связывания с __imp_printf попробуйте связать с legacy_stdio_definitions.lib - см. Ошибка ссылки статической библиотеки ftd2xx

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