Статическая ссылка на lib и все еще запрашивающая DLL - PullRequest
4 голосов
/ 11 февраля 2010

Используя visual studio 2008, у меня есть файл библиотеки .H и .LIB. Я написал программу и ссылался на LIB через свойства проекта. Он хорошо компилируется, но при запуске запрашивает установку DLL. Если библиотека DLL находится в том же каталоге, что и EXE, она работает, но если у меня есть LIB, не означает ли это, что функции статически связаны с моей программой?

Ответы [ 2 ]

10 голосов
/ 11 февраля 2010

Не все lib файлы являются статическими библиотеками. Некоторые из них являются библиотеками импорта, и, скорее всего, это то, с чем вы связались.

Если ваш lib файл намного меньше соответствующего ему dll файла, это верный признак того, что это библиотека импорта.

7 голосов
/ 11 февраля 2010

Чтобы ваша программа использовала DLL, необходима библиотека импорта. Это файл с расширением .lib, такой же как статический .lib. Но он очень маленький, он содержит только список функций, которые экспортируются DLL. Это нужно компоновщику, чтобы он мог вставить имя DLL в таблицу импорта. Вы можете убедиться в этом сами, запустив Dumpbin.exe / import на вашем .exe

...