Я создаю dll из сборки в Windows, используя GNU binutils.
Я знаю, что DLL может быть загружена при загрузке исполняемого файла или во время выполнения (с использованием вызова api LoadLibrary).
Для загрузки по времени загрузки мне, похоже, нужен только файл dll: нет файлов .a,.lib или .def. Я задавался вопросом, что представляет собой формат файла и с какой целью они служат.
Что я знаю и некоторые конкретные вопросы:
-
.a - это расширение, обычно используемое для статической библиотеки в Unix..a генерируются с помощью опции - out-implib опции GNU ld. Говорят, что это "библиотека импорта" , справедливая. Вопрос в том, "Что мне нравится в библиотеке импорта, если я не нуждаюсь в ней при связывании?"
-
.lib - это расширение, используемое для статической библиотеки в Windows, и, согласно wikipedia, также используется как "библиотека импорта" под окнами, поэтому я сильно подозреваю, что это просто другое имя для вызова binutils. файлы. True/false?
-
На всех страницах я могу найти точки, в которых .def файлы перечисляют экспортированный символ dll. Разве это не похоже на то, что должна делать "библиотека импорта" ?
-
Кроме того, я читаю здесь, что использование файлов .def является альтернативой ручному указанию экспорта в исходном файле (что я и сделал). Но я также помню, как читал (не могу найти ссылку назад).def файл снабжает индекс (порядковый номер) в экспортированные символы, время загрузки. Это так?