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

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

Действительно ли .lib регистрирует не, содержат код для функций, прибывающих из .dll файлов? Какова потребность в использовании двух отдельных файлов?

Разъяснитесь.

67
задан Micha Wiedenmann 19 February 2019 в 09:22
поделиться

1 ответ

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

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

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

92
ответ дан 24 November 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: