#c #c #dynamic-linking
#c #c #динамическое связывание
Вопрос:
У меня есть DLL с ее библиотекой импорта. Когда я пытаюсь сослаться на библиотеку импорта, я получаю ошибки компоновщика, из-за которых некоторые функции не могут быть разрешены. Я думаю, что существует несоответствие в версиях DLL и ее библиотеки импорта. Есть ли какой-либо способ проверить, что библиотека импорта полностью соответствует своей DLL, без проверки тонны функций вручную через DumpBin?
Ответ №1:
Проблема в том, что заголовочный файл содержит функции, которые не определены в .файл библиотеки lib. Скорее всего, у вас новый заголовочный файл и устаревший.файл библиотеки lib.
Возможные решения:
- Обратитесь к поставщику библиотеки, чтобы получить .файл библиотеки lib, который соответствует заголовочному файлу и используемой DLL.
- Создайте .создайте файл lib самостоятельно.
Ответ №2:
При связывании двоичных файлов важны только библиотеки *.lib (включая библиотеки импорта, но, очевидно, не включая DLL). Компоновщик может даже не знать, что это библиотека импорта, а не какая-либо другая статическая библиотека. Также возможно создать смешанную библиотеку, в которой некоторые функции будут статически добавлены в файл *.lib, а другие импортированы из некоторой библиотеки DLL.
Ваши неразрешенные функции просто отсутствуют в ваших библиотеках *.lib (включая вашу библиотеку импорта). Если вы связываете свою библиотеку импорта и точно знаете, что ваша DLL экспортирует неразрешенные функции, то ваша библиотека импорта либо не соответствует, либо была создана для того, чтобы не экспортировать эти функции (например, функции могут отсутствовать в списке в файле *.def проекта DLL).