链接64位dll mingw
我将一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,为了消除一些可能的误解:
.lib
/.a
导入库和静态库。.a
导入或静态库,但不能链接到 64 位.lib
文件。-m32
构建/链接,是吗?我所说的“正确导出”是指在 DLL 上运行时,
dumpbin /exports
或nm -t
显示导出的符号。您应该尝试什么:
通过调用 gcc 来构建,而不是直接调用 binutils。选项
-shared -o name.dll -Wl,--import-lib, libname.dll.a
应该可以帮助您入门。使用 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:
.lib
/.a
import and static libraries..a
import or static lib, but never a 64-bit.lib
file.-m32
, are you?By "properly exporting" I mean that
dumpbin /exports
ornm -t
reveal exported symbols when run on the DLL.What you should try:
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.Use MinGW-w64's
gendef
(it's in themingw-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?