繁体   English   中英

从DLL创建符号库以与MINGW32一起使用

[英]Create symbol libraries from DLLs for use with MINGW32

我正在使用C ++,Qt,Mingw32和Netbeans开发工作中的应用程序。 我需要使用由公司软件组开发的内部API。 我有需要链接的DLL的符号库.lib文件,但是我不能将这些库与Mingw32一起使用,它可以与Microsoft Visual Studio正常工作。

有谁知道是否可以导出符号并创建与Mingw32一起使用的.a符号库? 如果没有的话,我想我必须去Visual Studio。

我尝试使用程序“ pexports”创建一个.def文件和dlltool,但是没有用。 仍然存在未引用的符号错误,然后我将其抱怨的符号添加到.def,因为它们不存在,并且不再抱怨并编译了。 但是程序崩溃了。 我在Visual Studio中尝试了相同的代码,并且可以编译并正常运行。

您是否考虑过动态加载DLL? LoadLibrary,GetProcAddress等。您可能可以轻松编写一个类,该类封装所有DLL的入口点,加载和卸载库以及执行所有的#typedef等。这很麻烦,但如果是内部库,则可能没有入口点不是太多吗?

导入库被高估了。 :p

不确定是否有帮助,但是您可能希望查看本指南

这是我为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库文件。

您是否尝试过直接链接DLL,而不是.a / .lib? MinGW通常很乐意为您这样做。

我放弃了,有人说由于名字改错,不可能在Microsofts编译器上使用C ++导出来编译dll。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM