Смысл построения dll как библиотеки экспорта - PullRequest
4 голосов
/ 12 июля 2011

Что означает создание библиотеки DLL в качестве библиотеки экспорта?Я только что погуглил. Я нашел библиотеку динамических ссылок. Может кто-нибудь объяснить, что на самом деле является DLL?и почему мы должны добавить эти операторы в файл .dll

     extern  "c" _declspec(dllexport)

Я изучил статические и общие библиотеки, но я не уверен, почему мы идем для файлов DLL. Я узнал, что .dll используется длявремя выполнения.Но вы можете помочь мне и дать мне больше информации. Заранее спасибо

1 Ответ

1 голос
/ 13 июля 2011

Возможно, я был немного резок в своих комментариях. Я не являюсь авторитетом в dlls, но у меня есть некоторые практические знания о них, поэтому я постараюсь дать краткое объяснение.

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

«Создание библиотеки dll как библиотеки экспорта» - это немного запутанный термин. Я не слышал об этом раньше, и во время короткого поиска смог найти его только на странице cygwin, которую вы могли прочитать, учитывая ваши первоначальные теги. DLL может экспортировать некоторые или все свои функции и данные. Экспорт означает, что они доступны для использования другими программами и библиотеками. Какие имена экспортируются, можно контролировать различными способами. Одним из них является вставка _declspec(dllexport) в объявление функции. Другой способ - использовать файл определения с разделом экспорта.

При создании библиотеки DLL можно создать библиотеку import . Это файл, который затем можно использовать при создании исполняемого файла, который использует dll на этапе компоновки, чтобы сообщить ему, какие имена экспортируются из dll, поэтому программа знает, как разрешать ссылки на эти функции; другими словами: как их импортировать. (Это не всегда необходимо. Многие линкеры позволяют напрямую ссылаться на саму dll, тем самым устраняя необходимость в библиотеке импорта.)

Я понимаю, что это может сбивать с толку, но попробуйте найти учебник и несколько небольших примеров, чтобы увидеть, как он работает, и немного поиграть с ним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...