Создание библиотек символов из DLL для использования с MINGW32 - PullRequest
1 голос
/ 16 декабря 2010

Я разрабатываю приложение на работе, используя C ++, Qt, Mingw32 и Netbeans.Мне нужно использовать внутренний API, разработанный группой разработчиков программного обеспечения в компании.У меня есть библиотеки библиотек символов .lib для библиотек DLL, с которыми мне нужно связать файлы, но я не могу использовать эти библиотеки с Mingw32, он отлично работает с Microsoft Visual Studio.

Кто-нибудь знает, есть ли способ экспортасимволы и создать библиотеку символов .a, которая работает с Mingw32?Если нет, то мне придется перейти в Visual Studio.

Я пытался использовать программу "pexports" для создания файла .def и dlltool, но это не сработало.Все еще возникали ошибки в ссылках на символы, а затем я добавил символы, на которые он жаловался, в .def, потому что их там не было, и он перестал жаловаться и скомпилирован.Но программа вылетает.Я попробовал тот же код в Visual Studio, и он компилируется и работает нормально.

Ответы [ 5 ]

0 голосов
/ 17 декабря 2010

Я сдаюсь, некоторые люди говорят, что это невозможно с помощью dll, скомпилированной на компиляторе microsofts с экспортом c ++, из-за названия mangling

0 голосов
/ 16 декабря 2010

Вы пытались связать DLL напрямую, а не .a / .lib? MinGW обычно рады сделать это для вас.

0 голосов
/ 16 декабря 2010

Не уверен, поможет ли это, но вы можете проверить это руководство .

0 голосов
/ 16 декабря 2010

Вот как я это сделал для библиотеки mysql.

Создайте список экспорта, используя dllwrap:

dllwrap --export-all-symbols --output-def libmysql.def libmysql.dll --implib liblibmysql.a

Это создает список экспортов в файле .def, но неправильное название. Отредактируйте файл .def в текстовом редакторе и удалите символы «@». К именам символов также обычно добавляется номер. Я не знаю, как определить правильное имя, кроме как экспериментально:

Выполните следующее для создания библиотеки, совместимой с netbeans:

dlltool --input-def libmySQL.def --dllname libmySQL.dll --output-lib libMySQLclient.a -k

Скомпилируйте его, и вы получите неопределенные символы. Неопределенные символы будут иметь правильные украшения. Снова отредактируйте файл .def и исправьте имена символов. Перезапустите dlltool, чтобы получить правильный файл библиотеки .a.

0 голосов
/ 16 декабря 2010

Рассматривали ли вы динамическую загрузку DLL? LoadLibrary, GetProcAddress и т. Д. Вы, вероятно, можете легко написать класс, который инкапсулирует все точки входа DLL, загружает и выгружает библиотеку, выполняет все #typedefs и т. Д. Это трудоемкая работа, но если это внутренняя библиотека, то, вероятно, нет. не слишком много точек входа?

Импортные библиотеки переоценены. : Р

...