DLL и изменение имен

У меня есть сторонняя библиотека LIB, в которой символы экспортируются как простой C / cdecl, поэтому, например, dumpbin.exe /SYMBOLS сообщает, что экспортируются как __imp_nvmlInit, так и nvmlInit.

Однако в Visual Studio 2010, когда я пытаюсь импортировать их, файл заголовка будет иметь

extern "C" nvmlReturn_t nvmlInit(...);

но когда я пытаюсь скомпилировать, я получаю следующую ошибку:

main.obj: ошибка LNK2019: неразрешенный внешний символ _nvmlInit, указанный в функции _main

Как я могу запретить Visual Studio искать этот символ с ведущим подчеркиванием? __declspect(dllimport) не работает, потому что тогда он украшает до __imp__nvmlInit (слишком много подчеркивания).

Спасибо.


person Andrew Lee    schedule 11.05.2011    source источник


Ответы (1)


Это ошибка компоновщика. Вам необходимо связать с файлом .LIB, связанным с DLL, что даст компоновщику обещание, что функция будет доступна во время выполнения, когда сама DLL будет загружена.

person Community    schedule 11.05.2011
comment
К сожалению, я допустил ошибку в своем исходном сообщении - я на самом деле ссылаюсь на .LIB, и библиотека экспортирует полностью недекорированные функции, тогда как компоновщик ищет имена, добавленные подчеркиванием ... - person Andrew Lee; 11.05.2011