我有一个MinGW64编译DLL(Python模块),在加载时其给出错误:
ImportError: DLL load failed: Invalid access to memory location
该DLL仅与64位库(依赖沃克确认),并具有调试符号。 该代码是相当复杂的C ++ 11(约30源文件),我不能对分了。 我没有成功编译和测试等模块MinGW64已,工具链工作正常。
在网络上有人报这个错误使用代码SSE2指令(那些支持我的硬件,我没有明确使用它们)或从尚未被初始化全局变量读取(有有一些功能__attribute__((constructor))
但这些应该MinGW64就好了工作,根据我读过; 更新:我删除了所有构造函数,以确保它是不是原因-它没有什么区别)。
什么是分析从哪里是错误的方法来?
我的尝试:
当我在调试器中加载DLL(使用ctypes.WinDLL(...)
不幸的是我从GDB得到的只是无意义的堆栈跟踪-显然,错误是由被困ntdll.dll
和信号上升,但它没有给出任何进一步的提示在何处来自的错误:
Program received signal SIGTRAP, Trace/breakpoint trap.
0x0000000077c23522 in ntdll!ExpInterlockedPopEntrySListFault16 ()
from C:\Windows\system32\ntdll.dll
(gdb) warning: HEAP[python.exe]:
warning: Invalid address specified to RtlSizeHeap( 00000000003B0000, 0000000002306830 )
(gdb) bt
#0 0x0000000077c23522 in ntdll!ExpInterlockedPopEntrySListFault16 ()
from C:\Windows\system32\ntdll.dll
#1 0x0000000077c0c241 in ntdll!RtlZeroHeap ()
from C:\Windows\system32\ntdll.dll
#2 0x0000000077c0c250 in ntdll!RtlZeroHeap ()
from C:\Windows\system32\ntdll.dll
#3 0x0000000077c3c130 in ntdll!LdrLoadAlternateResourceModuleEx ()
from C:\Windows\system32\ntdll.dll
#4 0x00000000003b0000 in ?? ()
#5 0x0000000002306830 in ?? ()
#6 0x00000000003b0000 in ?? ()
#7 0x00000000792e21c0 in ?? ()
#8 0x00000000003b0000 in ?? ()
#9 0x0000000077c3c0ba in ntdll!LdrLoadAlternateResourceModuleEx ()
from C:\Windows\system32\ntdll.dll
#10 0xffffffffffffffff in ?? ()
#11 0x0000000050000061 in ?? ()
#12 0x0000000000000000 in ?? ()
打开与该文件时我也挂了对象文件以及“Hello World”的可执行文件,但GDB崩溃已经Reading symbols from woomain.exe
(这是我的可执行文件):