链接64位dll mingw

发布于 2024-12-09 04:04:37 字数 430 浏览 1 评论 0原文

我将一个 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的bug吗?

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

我完全被这个问题困住了。 谢谢。

I'm linking a dll with some dependencies on other dlls.
I have a trouble with linking a 64bit version of my project. With 32bit version all is ok as far as I use mingw32. But when I switch to 64bit version of dependent dlls and mingw-w64 it tells the following:

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

Where 'libblabla' is a library I depend on. I'm absolutely sure it is 64bit version and should be compatible. Is it a bug in mingw?

Also, I tried to link using lib file, but provided lib is also considered as incompatible and the one generated by dlltool has no import table generated!

I'm totally stuck with this.
Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

妖妓 2024-12-16 04:04:37

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

  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 的 gendef(位于 SVN/sources 中的 mingw-w64-tools 目录中)生成 .def 文件,您可以在其中创建一个导入库。

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

First, to get some possible misunderstanding out of the way:

  1. GCC/ld can link to (properly exporting) 32-bit DLLs and .lib/.a import and static libraries.
  2. GCC/ld should be able to link to a properly exporting 64-bit DLL or .a import or static lib, but never a 64-bit .lib file.
  3. You aren't building/linking with -m32, are you?

By "properly exporting" I mean that dumpbin /exports or nm -t reveal exported symbols when run on the DLL.

What you should try:

  1. Build the through a call to gcc, not any direct calls to binutils. The options -shared -o name.dll -Wl,--import-lib, libname.dll.a should get you started.

  2. Use MinGW-w64's gendef (it's in the mingw-w64-tools directory in their SVN/sources) to generate a .def file, which you can create an import library.

If these produce no symbols in the import library, you're not exporting any symbols. Although this would be surprising as the error message says the dll is 32-bit. What does MSYS/Cygwin's file command on the dll return?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文