我正在将dll与其他dll上的某些依赖项链接起来。 我在链接64位版本的项目时遇到了麻烦。对于32位版本,只要我使用mingw32就可以了。但是,当我切换到64位版本的依赖dll和mingw-w64时,它会告诉以下内容:
c:/.../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible .\lib\native/libblabla.dll when searching for -llibblabla
“libblabla”是我依赖的库。我绝对相信它是64位版本并且应该兼容。这是mingw中的一个错误吗?
另外,我尝试使用lib文件链接,但是提供的lib也被认为是不兼容的,而dlltool生成的那个没有生成导入表!
我完全坚持这个。 谢谢。
答案 0 :(得分:2)
首先,要避免一些可能的误解:
.lib
/ .a
导入和静态库。.a
导入或静态库,但绝不能链接到64位.lib
文件。-m32
建立/链接,是吗?通过“正确导出”,我的意思是dumpbin /exports
或nm -t
在DLL上运行时会显示导出的符号。
你应该尝试什么:
通过调用gcc构建,而不是直接调用binutils。选项-shared -o name.dll -Wl,--import-lib, libname.dll.a
可以帮助您入门。
使用MinGW-w64的gendef
(它位于SVN /源的mingw-w64-tools
目录中)生成.def文件,您可以创建一个导入库。
如果这些在导入库中没有产生符号,则表示您不会导出任何符号。虽然这会令人惊讶,因为错误消息显示dll是32位。在dll上MSYS / Cygwin的file
命令返回什么?