Статические библиотеки в Linux имеют расширение .a
.Статические библиотеки в Windows имеют расширение .lib
.Динамические библиотеки в Windows имеют расширение .dll
;для того, чтобы связать с DLL, требуется библиотека импорта.Библиотека импорта является статической библиотекой.Он содержит код, необходимый для загрузки DLL.Теперь вы используете GCC (не cl.exe
) для компиляции в Windows.GCC имеет другое соглашение о расширении файлов для библиотек импорта, оно «должно называться * .dll.a или * .a», как описано в документе для --out-implib
, на который вы ссылались.
Библиотеки импорта (.lib
с MSVC или .dll.a
с GCC) являются статическими библиотеками: они содержат код для загрузки DLL. У меня был тот же вопрос на днях.
DLL может иметь функции, которые экспортируются, и функции, которые не экспортируются.Библиотека импорта должна знать, какие функции экспортированы, а какие нет.Одним из способов сообщить об этом является файл DEF.
При сборке библиотеки DLL компоновщик использует файл .def для создания файла экспорта (.exp) и библиотеки импорта (.lib)файл.Затем компоновщик использует файл экспорта для создания файла DLL.Исполняемые файлы, которые неявно ссылаются на DLL, ссылаются на библиотеку импорта при сборке.- MSDN: экспорт из DLL с использованием файлов DEF
Также см. MSDN: экспорт функций из DLL по порядку, а не по имени , вместе которыедолжен ответить на ваш последний вопрос по экспорту по индексу или порядковому номеру.