Wie man debug-DLL load failed: Ungültiger Zugriff auf Speicherbereich
Ich habe eine MinGW64-kompilierte DLL (python-Modul), die gibt Fehler beim beladen:
ImportError: DLL load failed: Invalid access to memory location
Der DLL verknüpft ist nur auf 64bit-Bibliotheken (Dependency Walker bestätigt) und hat die debugging-Symbole. Der code ist Recht Komplex, c++11 (rund 30 Quelle-Dateien), kann ich nicht halbieren Sie. Ich habe erfolgreich kompiliert und getestet anderen Modul mit MinGW64 schon, die toolchain funktioniert.
Einige Leute rund um die web gemeldet, dieser Fehler für den code mit SSE2-Anweisungen (diejenigen unterstützt werden, die auf meiner hw, und ich glaube nicht, verwenden Sie explizit) oder das Lesen von globalen vars, die noch nicht initialisiert wurde (es gibt ein paar Funktionen mit __attribute__((constructor))
, aber diese sollte in den MinGW64 ganz gut, nach dem was ich gelesen habe; update: ich entfernte alle Konstruktor-Funktionen, um sicherzustellen, es war nicht die Ursache - es macht keinen Unterschied).
Was wären Methoden um zu analysieren, wo der Fehler herkommt?
, Was ich versucht habe:
Wenn ich laden Sie die DLL im debugger (mit ctypes.WinDLL(...)
), den ich leider nur sinnlos stacktrace von gdb - offensichtlich, der Fehler ist gefangen von ntdll.dll
- und signal ausgelöst wird, aber es gibt keine weiteren Hinweise, wie und wo der Fehler kam:
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 ?? ()
Ich auch mit dem object-Dateien mit einem "hello world" - executable, aber gdb stürzt bereits beim öffnen der Datei mit Reading symbols from woomain.exe
(das ist meine ausführbare Datei):
- Eudoxos, haben Sie versuchen, eine Verknüpfung zu dll wirklich dynamisch erst zur Laufzeit? Spielen mit LoadLibraryEx und Ihre Fahnen. Die exe würde auf jeden Fall starten im debugger und scheitern nicht früher als
LoadLibraryEx
aufgerufen wird. - Das laden der DLL in python ist vollständig dynamisch (das war der erste Fall). Ich habe versucht, die Verknüpfung zu der
.exe
Datei direkt nur um zu sehen, ob es einen Unterschied macht - tut es aber nicht. - Ziemlich traurig, wenn ein Fehler stürzt der debugger. Blättern Sie bis die creek ohne ein Paddel. Benötigen Sie eine andere Paddel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem war, dass python im Zusammenhang mit den unterschiedlichen msvcrt als MinGW beim kompilieren des Moduls-es wird berichtet, bei http://bugs.python.org/issue16472.
Gut, dies ist vielleicht nicht die richtige Lösung für Sie, nur ein Hauch.
ImportError: DLL load failed: Invalid access to memory location.
Traf ich den gleichen Fehler, wenn Sie versuchen, um meine eigene Erweiterung von Python programmiert in C. Plattform: Windows 32-bit.War es eine echte Schmerzen, da dieser Fehler erschien zufällig in der interaktiven als auch im nicht-interaktiven Modus in allen Python-Umgebungen (Spyder, Notebook -, Gleit-Konsole...). Ich mein code kompiliert mit MinGW und Python-distutils (Befehl
python setup.py install
). Die compilation gab keine Warnungen oder Fehler produziert und pyd-Datei in das richtige Verzeichnis. Aber beim importieren dieses Modulimport example
pro mein Python-code, der es unregelmäßig abgestürzt (in der Regel nur eine der fünf versuche zu importieren, die das Modul erfolgreich).Seltsame war, dass auf einem anderen computer lief es einwandfrei... Naja, fand ich endlich ein workaround - ich heruntergeladen habe, eine neuere version von MinGW (zuvor hatte ich die version, die kommt verpackt in Qt-SDK-distribution) und kompiliert die module wieder. Dann funktionierte es nicht mehr abstürzt. Aber ich fand keine systematische Lösung oder Erklärung. Also ich hätte etwas mit dem compiler (vielleicht fehlen Ihr DLLs? Ich weiß es nicht genau), dass wurde verwendet, um generieren die pyd-Datei.
War ich immer dieselbe Fehlermeldung beim import win32api, ich habe gerade den import ctypes, bevor Sie den import win32api und der Fehler war nicht da.