Подтвердить что ты не робот

В чем польза .exp и в чем разница между .lib и .dll?

В чем польза .exp во время компиляции и компоновки? В чем разница между .lib и .dll? Я знаю, что .lib будет использоваться, в то время как ссылки и .dll будут использоваться при запуске программы. Но в чем именно разница между .lib и .dll?

Разве файл .lib не содержит код для функций из файлов .dll? Зачем нужно использовать два отдельных файла?

Просьба уточнить.

4b9b3361

Ответ 1

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

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

DLL не будет связываться до тех пор, пока исполняемый файл не будет создан для предоставления файла .lib, но исполняемый файл не будет связан до создания библиотеки DLL для предоставления .lib файла. Чтобы разбить зависимость, вы запускаете компоновщик с исполняемым файлом, который не работает (поскольку он не может найти DLL файл для DLL), но будет генерировать .exp файл. Затем вы связываете DLL с .exp файлом для исполняемого файла. Затем вы можете повторно запустить ссылку для создания исполняемого файла, используя DLL файл для DLL.