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

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

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

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


person Vineel Kumar Reddy    schedule 28.04.2010    source источник


Ответы (1)


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

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

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

person Jerry Coffin    schedule 28.04.2010