В настоящее время мы переключаем процесс сборки W32 кроссплатформенного (linux, osx, w32) проекта с VisualStudio на mingw.
Одна из проблем, с которыми мы сталкиваемся, заключается в том, что наши проекты создают динамическую библиотеку (foo.dll
), с которой могут связываться сторонние проекты. Чтобы это работало на W32/MSVC, требуется библиотека импорта (foo.lib
).
Теперь, следуя документации, довольно легко создать файл .def, содержащий всю информацию. требуется для импорта библиотеки:
gcc -shared -o foo.dll foo-*.o -Wl,--output-def,foo.def
Чтобы использовать файл foo.def
, документы говорят мне использовать инструмент Microsoft LIB для создания из него файла foo.lib
:
lib /machine:i386 /def:testdll.def
Это, очевидно, требует, чтобы на компьютере сборки был установлен (подмножество) MSVC. Однако мы хотели бы выполнить кросс-компиляцию всего этого в наших Linux-системах (возможно, даже в некоторых CI), что делает установку MSVC довольно утомительной.
Поэтому мне интересно, есть ли собственный способ MinGW для преобразования файла foo.def
в библиотеку импорта foo.lib
?
(Мы понимаем, что, в конце концов, только пользователям MSVC требуется библиотека импорта, и что у них будет готовый инструмент lib
. Однако, поскольку мы всегда поставляли файл foo.lib
, переход на foo.def
может нарушить работу сторонних систем сборки — чего мы хотели бы избежать).