Visual C ++: Что такое динамически связанный файл .lib? - PullRequest
0 голосов
/ 12 февраля 2010

Я заметил следующее о библиотеке, которую я использую:

  • Библиотека скомпилирована в .lib файл.
  • Мой код должен быть скомпилирован как Многопоточная (отладочная) DLL для связи с этой библиотекой.

Я открываю .sln (решение) файл библиотеки (с открытым исходным кодом) и вижу следующее в ее Свойствах проекта :

  1. Библиотека времени выполнения * Для параметра 1021 * установлено значение Многопоточная (отладочная) DLL .
  2. Тип конфигурации установлен на Статическая библиотека (.lib)

Моя путаница:

  1. Нет ли конфликта в параметрах библиотеки выше? (Статическая библиотека говорит об одном варианте, DLL - о другом)
  2. Какое животное представляет собой .lib , который динамически связан ? Чем он отличается от DLL ?

Обратите внимание, что я знаю о разнице между статическими библиотеками и динамическими библиотеками в мире Linux.

Ответы [ 3 ]

2 голосов
/ 12 февраля 2010

Опция «RunTime Library» не относится к ВАШЕЙ библиотеке. Он сообщает компилятору, что вы импортируете свои функции из MSVCRTxx.DLL во время выполнения.

Параметр «Тип конфигурации» относится к вашей библиотеке и поэтому не зависит от параметра «Библиотека RunTime».

1 голос
/ 12 февраля 2010

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

Файл LIB позволяет Windows делать все это за вас при запуске вашего EXE-файла (включая поиск используемой DLL-библиотеки и рекурсивную загрузку зависимых DLL-файлов), статически связывая динамическую библиотеку во время выполнения, избегая при этом раздувания вашего EXE-файла исполняемый код и позволяющий нескольким процессам совместно использовать один и тот же образ DLL в памяти.

1 голос
/ 12 февраля 2010

Я не знаю о несоответствии конфигурации, но файл .LIB при создании с библиотекой .DLL является «библиотекой экспорта» - он не содержит никакого кода, а содержит только имена вызываемых функций и объектов в DLL. Компоновщик использует это для удовлетворения ссылок во время соединения, которые в конечном итоге разрешаются динамической загрузкой во время выполнения.

...