Почему 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.)