3

我正在链接一个 dll 与其他 dll 的一些依赖项。我在链接项目的 64 位版本时遇到问题。就我使用 mingw32 而言,使用 32 位版本一切正常。但是当我切换到依赖 dll 和 mingw-w64 的 64 位版本时,它会显示以下内容:

c:/.../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible .\lib\native/libblabla.dll when searching for -llibblabla

'libblabla' 是我所依赖的库。我绝对确定它是 64 位版本并且应该兼容。这是mingw中的错误吗?

另外,我尝试使用lib文件链接,但提供的lib也被认为是不兼容的,由dlltool生成的没有生成导入表!

我完全坚持这一点。谢谢你。

4

1 回答 1

2

首先,为了消除一些可能的误解:

  1. GCC/ld 可以链接到(正确导出)32 位 DLL 和.lib/.a导入和静态库。
  2. GCC/ld 应该能够链接到正确导出的 64 位 DLL 或.a导入或静态库,但不能链接到 64 位.lib文件。
  3. 你不是在建立/链接-m32,是吗?

“正确导出”是指在 DLL 上运行时显示导出的符号dumpbin /exportsnm -t

你应该尝试什么:

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

  2. 使用 MinGW-w64 gendefmingw-w64-tools在他们的 SVN/sources 目录中)生成一个 .def 文件,您可以创建一个导入库。

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

于 2011-10-12T10:00:22.597 回答