gpt4 book ai didi

c++ - 使用 mingw64 在 jmpq 上崩溃到另一个 dll 中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:25 26 4
gpt4 key购买 nike

我正在使用 mingw64 在 Windows 上将我的项目从 32 位迁移到 64 位。

编译/链接一切正常,但是我在运行时遇到了一些问题:调用另一个 DLL 中引用的函数时程序崩溃,例如在这样的指令上:

0x574040   ff 25 e8 66 6a 00   jmpq *0x6a66e8(%rip)   # 0xc1a72e <_ZN12QTableWidget18currentCellChangedEiiii+638>

上面的例子是一个 Qt 函数,在启动应用程序时调用,但我在使用其他 DLL 时也有类似的问题。

奇怪的事情:我仅在 Release模式下遇到 Qt DLL 的问题(这意味着我使用了另一组名称以“d”结尾的 DLL)。

在 Debug模式下,我遇到了类似的问题,但只有一个库。有了这个库,我就能够动态加载函数(使用 QLibrary ),因此 DLL 似乎不会无效。

我花了一整天的时间试图找出问题所在,但我没有其他想法:

  • DLL 和 exe 文件在 objdump 时被视为“文件格式 pei-x86-64”。
  • 应该是用相同的编译器编译的(除了我提到的附加库是用 MSVC 编译但只有 C 接口(interface))
  • DLL 文件实际上存在于 exe 文件旁边(否则我会遇到有意义的错误“X.DLL 正在从您的计算机发送”)。

如果有人有任何线索,请告诉我!

最佳答案

好的,实际上有问题:

  • 对于使用 MSVC 编译的附加库,这是一个已知问题 it is not possible to link against .lib .正如评论中所说,gcc 可以直接链接到 DLL,从而为我解决了这个库的问题。
  • 我在 Release模式下遇到其他库的问题,但那是一个完全不同的问题:我正在使用的软件有一个保护机制,只在 Release模式下激活,这把一切都搞砸了。

关于c++ - 使用 mingw64 在 jmpq 上崩溃到另一个 dll 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28300462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com