DLL и искажение имен - PullRequest
3 голосов
/ 11 мая 2011

У меня есть сторонняя 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 (одно подчеркивание слишком много).

Спасибо.

1 Ответ

1 голос
/ 11 мая 2011

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

...