Почему Visual Studio нужна статическая библиотека (.lib) для динамической компоновки?

Я хочу использовать некоторые DLL в моем проекте ( VS2013 - C++),

Я дал путь к dll и заголовкам, используя "каталоги-> свойства-> каталоги vC++", и после сборки проекта появляются ошибки компоновщика (общий "неразрешенный внешний символ"). проблема может быть решена путем предоставления файла.lib компоновщику!

Но зачем статическая библиотека (.lib) для динамического связывания???

2 ответа

Решение

Это библиотека импорта, которая содержит определения экспорта, который находится внутри DLL и имя этого DLL (*)

Ты можешь использовать LIB с /DEF Возможность создания библиотеки импорта и файла экспорта. LINK использует файл экспорта для создания программы, которая содержит экспорт (обычно это динамическая библиотека (DLL)) и использует библиотеку импорта для разрешения ссылок на этот экспорт в других программах.

А также:

В большинстве случаев вам не нужно использовать LIB создать вашу библиотеку импорта. Когда вы связываете программу (исполняемый файл или DLL) который содержит экспорт, LINK автоматически создает библиотеку импорта, которая описывает экспорт. Позже, когда вы связываете программу, которая ссылается на этот экспорт, вы указываете библиотеку импорта.

Динамические библиотеки загружаются во время выполнения (при запуске приложения) - компоновщик не проверяет, где находится определенный символ DLL, Header говорит __dllimport - "этот символ является внешним, его нужно откуда-то импортировать". Lib говорит: "Я знаю, где этот символ - он находится в XXX.dllтак что смотрите там после запуска ".


(*) Я видел много людей, которые пытались изменить имена .lib и соответствующий .dll и ожидал, что это сработает. Содержание .lib это причина, почему это не так.

  • Чтобы сообщить ему имя библиотеки DLL и что в ней, и какие номера записи в ней используются, и

  • изолировать двоичный интерфейс (.lib) от его реализации (DLL). Например, в Winsock был стандартный файл.lib, который не зависел от реальных реализаций разных производителей.

Другие вопросы по тегам