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