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