我正在使用C ++,Qt,Mingw32和Netbeans开发应用程序。我需要使用由公司软件组开发的内部API。 我有需要链接的DLL的符号库.lib文件,但是我不能将这些库与Mingw32一起使用,它可以与Microsoft Visual Studio一起使用。
有没有人知道是否有办法导出符号并创建一个与Mingw32一起使用的.a符号库?如果没有,我想我必须转到Visual Studio。
我尝试使用“pexports”程序创建.def文件和dlltool,但这不起作用。仍然有未引用的符号错误,然后我将它所抱怨的符号添加到.def中,因为它们不在那里而且它停止了抱怨和编译。但程序崩溃了。我在Visual Studio中尝试了相同的代码,它编译并运行良好。
答案 0 :(得分:0)
您是否考虑过动态加载DLL? LoadLibrary,GetProcAddress等。您可以轻松编写一个封装所有DLL入口点的类,加载和卸载库,并执行所有#typedefs等。这是一项繁重的工作,但如果它是一个内部库,那么可能还没有进入点太多了?
导入库被高估了。 :P
答案 1 :(得分:0)
不确定是否有帮助,但您可能希望查看this guide。
答案 2 :(得分:0)
以下是我为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库文件。
答案 3 :(得分:0)
您是否尝试过直接链接DLL,而不是.a / .lib? MinGW通常很乐意为您做到这一点。
答案 4 :(得分:0)
我放弃了,有些人说用c ++导出的微软编译器编译的dll是不可能的,因为名称错误