#c #visual-c #name-decoration
#c #visual-c #оформление имени
Вопрос:
У меня есть сторонняя библиотека, в которой символы экспортируются как обычный 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:
Это ошибка компоновщика. Вам нужно связать с .Файл библиотеки, связанный с DLL, который даст компоновщику обещание, что функция будет доступна во время выполнения, когда будет загружена сама библиотека DLL.
Комментарии:
1. Упс, извините, я допустил ошибку в своем первоначальном сообщении — на самом деле я ссылаюсь на . LIB, и библиотека экспортирует полностью не оформленные функции, в то время как компоновщик ищет имена с подчеркиванием перед ними…