链接64位dll mingw

时间:2011-10-12 09:02:16

标签: dll mingw linkage

我正在将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生成的那个没有生成导入表!

我完全坚持这个。 谢谢。

1 个答案:

答案 0 :(得分:2)

首先,要避免一些可能的误解:

  1. GCC / ld可以链接到(正确导出)32位DLL和.lib / .a导入和静态库。
  2. GCC / ld应该能够链接到正确导出的64位DLL或.a导入或静态库,但绝不能链接到64位.lib文件。
  3. 您没有与-m32建立/链接,是吗?
  4. 通过“正确导出”,我的意思是dumpbin /exportsnm -t在DLL上运行时会显示导出的符号。

    你应该尝试什么:

    1. 通过调用gcc构建,而不是直接调用binutils。选项-shared -o name.dll -Wl,--import-lib, libname.dll.a可以帮助您入门。

    2. 使用MinGW-w64的gendef(它位于SVN /源的mingw-w64-tools目录中)生成.def文件,您可以创建一个导入库。

    3. 如果这些在导入库中没有产生符号,则表示您不会导出任何符号。虽然这会令人惊讶,因为错误消息显示dll是32位。在dll上MSYS / Cygwin的file命令返回什么?