使用mingw64将jmpq崩溃到另一个dll中的函数

时间:2015-02-03 13:45:16

标签: c++ windows mingw-w64

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

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

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

上面的示例是使用Qt函数,在启动应用程序时调用,但我遇到与其他DLL类似的问题。

奇怪的事情:我在发布模式下遇到了Qt DLL的问题(这意味着我使用另一组名称以&#39; d&#39结尾的DLL ;)

在调试模式下,我有一个类似的问题,但只有一个lib。使用这个lib,我能够动态加载函数(使用QLibrary),因此DLL似乎无效。

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

  • DLL和exe文件被视为&#34;文件格式为pei-x86-64&#34;当objdump他们。
  • 应该用相同的编译器编译(除了我提到的附加的lib,它是用MSVC编译但只有C接口)
  • DLL文件实际上存在于exe文件旁边(否则我会面临一个有意义的错误&#34; X.DLL正在从你的计算机中删除&#34;)。

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

1 个答案:

答案 0 :(得分:0)

好的,实际上有问题:

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