私がロードされたときにエラーを与えるにMinGW64コンパイルDLL(のpythonモジュール)を、持っている:に失敗しました:メモリロケーションへのアクセスが無効です
ImportError: DLL load failed: Invalid access to memory location
をDLLのみ64ビットのライブラリにリンクされている(依存関係Walkerはそれを確認して)、デバッグシンボルを持っています。コードはかなり複雑なC++ 11(約30のソースファイル)ですが、私はそれを二分できません。私は正常にMinGW64で他のモジュールをコンパイルしてテストしましたが、ツールチェーンはうまく動作します。
SSE2命令(これらはhwでサポートされていますが、明示的に使用しません)またはまだ初期化されていないグローバル変数から読み取るコードでは、このエラーが報告されることがあります__attribute__((constructor))
で機能しますが、それらはMinGW64でも正常に動作します。update:すべてのコンストラクタ関数を削除して、それが原因ではないことを確認しました。
エラーの原因はどこから分析されますか? - 明らかに、エラーがntdll.dll
によってトラップされ、信号が発生するが、それがない
私は(ctypes.WinDLL(...)
を使用して)デバッガでのDLLをロードすると、私は残念ながらGDBからだけ無意味なスタックトレースを取得する:私が試した何
エラーがどこから来たのかについてどのような更なるヒントを与える:私も、「Hello World」の実行ファイルとオブジェクトファイルをリンクさ
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 ??()
、すでにGDBがクラッシュした(それは私の実行可能です)Reading symbols from woomain.exe
でファイルを開くとき:
Eudoxos、実行時にのみ、本当に動的にdllにリンクしようとしましたか? [LoadLibraryEx](http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179%28v=vs.85%29.aspx)とそのフラグで再生します。あなたのexeは間違いなくデバッガで起動し、 'LoadLibraryEx'が明示的に呼び出されるより早く失敗します。 – Jarekczek
@ Jarekczek:PythonでDLLを読み込むことは完全に動的です(これが最初のケースでした)。私は '.exe'ファイルに直接リンクしてみましたが、違いがあるかどうかだけを確認しました。 – eudoxos
バグがデバッガをクラッシュさせるとかなり悲しいです。パドルなしであなたを小川の上に残す。あなたは別のパドルが必要です。 –