2013-11-26 3 views
11

У меня есть вопрос о библиотеке связывании и .lib файлов ...Зачем некоторым DLL-файлам нужен дополнительный .lib-файл для связи?

это контекст:

  • OS = Windows,
  • IDE = QT

Я создал DLL: MyLib.dll.
Чтобы использовать эту библиотеку в моем проекте QT, у меня только включить включаемый путь, ссылка на библиотеку и использовать файлы заголовков:

LIBS += "C:\myPath\MyLib.dll" 
INCLUDEPATH += "C:\myPath" 
HEADERS += \ 
    ../myPath/MyLib_global.h \ 
    ../myPath/mylib.h 

Я использую библиотеку DLL третьей стороны в моем проекте: третий .dll
Если я сделать то же самое, как и в приведенном выше примере, он не работает:

LIBS += "C:\myPath\third.dll" 

DLL, третья сторона приходит с .lib файл «third.lib», который я по-видимому, нужно использовать вместе с DLL.

Почему? Зачем некоторым библиотекам DLL нужен .lib-файл, но библиотеки DLL нет?
Может ли быть .lib статическая библиотека, обращающаяся к DLL?

Большое спасибо!

ответ

4

Файл lib является файлом библиотеки импорта, который позволяет окончательному исполняемому файлу содержать таблицу адресов импорта (IAT), на которую ссылаются все вызовы функций DLL. В принципе, позволяет просматривать функции.

Вы можете прочитать об этом here.

Чтобы Qt генерировать LIB, добавьте к этому .pro: -

CONFIG+= staticlib 

Here's некоторые документы о том, как создавать библиотеки.

+0

благодарит @ Merlin069 за ваш ответ. это разъясняет! Одна вещь: когда я создал myLib.dll, я не видел никакого способа создать файл lib с DLL-файлом. заключается в том, что при выборе при создании DLL? Кроме того, все вызовы функций в моей DLL, похоже, доступны без файла lib. Это не то, что должен разрешить файл .lib? спасибо – WewillSee

+0

По умолчанию должна быть библиотека импорта. – ExpatEgghead

+0

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

3

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

What is inside .lib file of Static library, Statically linked dynamic library and dynamically linked dynamic library?

Вам не нужен файл .lib использовать динамическую библиотеку, но без одного вы не можете рассматривать функции из DLL, как обычные функции в вашем коде , Вместо этого вы должны вручную вызвать LoadLibrary для загрузки библиотеки DLL (иFreeLibrary по завершении) и GetProcAddress для получения адреса функции или элемента данных в DLL . Затем вы должны направить возвращенный адрес соответствующему указателю на функцию, чтобы использовать его в .

Смежные вопросы