Почему visual studio создает.Либ вместе с ним.Dll файлы?

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

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

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

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

в команде компоновщика Logger линии, я вижу: / IMPLIB: "путькLogger.lib"

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

с M$'S IMPLIB doc, я вижу его часть процесса связи. Я все еще не понимаю.

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

2 ответов


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

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

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


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