Почему Visual Studio создает.LIB вместе с.DLL?

У меня есть проект "Logger", в котором тип конфигурации.dll.

"Logger" использует "libconfig" (синтаксический анализатор с открытым исходным кодом). В настоящее время у меня есть отдельный проект для "libconfig" и его тип конфигурации.lib

Я добавил "libconfig" в настройки и ссылки Logger с помощью:

  • зависимости библиотеки ссылок = true
  • использовать входы зависимости библиотеки = false

В командной строке компоновщика Logger я вижу: /IMPLIB: "путь \ к \Logger.lib"

Мой вопрос: зачем нужно создавать Logger.lib? Я вижу /OUT = "путь \ к \Logger.dll", но я пытаюсь освоить процесс сборки Visual Studio.

Из документа M$ IMPLIB я вижу его часть процесса LINK. Я до сих пор не понимаю.

Редактировать: я не упомянул, как использовать Logger DLL. Мое приложение будет загружать его во время выполнения (так как эта функциональность требуется только для определенных аргументов строки cmd)

2 ответа

Решение

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

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

Возможно, сейчас это мало что значит, но в то время, когда Windows была новой, довольно много программ все еще распространялось на гибких дисках 360K, поэтому минимизация размера файла, который вы распространяли среди пользователей, считалась довольно важной.

EXE-файл, который использует ваш файл logger.dll, потребуется для ссылки на logger.lib. Без библиотеки exe не может быть построен. Библиотека содержит функции-заглушки, которые удовлетворяют вызовам, выполняемым исполняемым кодом. (Во время выполнения заглушки переводят вызовы в DLL.)

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