2016-10-20 7 views
3

Ich versuche, Absturzbericht in C++ Qt auf Windows mit MingW zu schreiben. Ich nahm Bezug von https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c/ , aber mein Code kompiliert nicht und gibt folgende Fehler - Ich verwende diesen Code auf Windows 10 mit Qt 5.4.0 mingw. Ich bekomme wenige Fehler während der Erstellung dieses Codes. Fehler: undefiniert Bezugnahme auf [email protected]′ error: undefined reference to _imp__SymGetModuleBase @ 8 ' Fehler: undefiniert Bezug auf [email protected]′ error: undefined reference to _imp__StackWalk @ 36' Fehler: undefiniert Bezugnahme auf `_imp__SymCleanup @ 4 'Absturzbericht in C++ Mingw auf Windows

Diese Fehler sind aus folgenden Code.

void windows_print_stacktrace(CONTEXT* context) 
{ 
    SymInitialize(GetCurrentProcess(), 0, true); 

    STACKFRAME frame = { 0 }; 

    /* setup initial stack frame */ 
    frame.AddrPC.Offset   = context->Eip; 
    frame.AddrPC.Mode   = AddrModeFlat; 
    frame.AddrStack.Offset  = context->Esp; 
    frame.AddrStack.Mode  = AddrModeFlat; 
    frame.AddrFrame.Offset  = context->Ebp; 
    frame.AddrFrame.Mode  = AddrModeFlat; 

    while (StackWalk(IMAGE_FILE_MACHINE_I386 , 
        GetCurrentProcess(), 
        GetCurrentThread(), 
        &frame, 
        context, 
        0, 
        SymFunctionTableAccess, 
        SymGetModuleBase, 
        0)) 
    { 
    addr2line(icky_global_program_name, (void*)frame.AddrPC.Offset); 
    } 

    SymCleanup(GetCurrentProcess()); 
} 

Bildhlp.dll ist verantwortlich für die oben genannten Funktionen. Kann mir jemand sagen, wie man diese Art von Fehlern beheben kann.

Vielen Dank im Voraus.

Antwort

3

Sieht aus, als ob Sie die imagehlp.lib Importbibliothek nicht zu Ihrem Build hinzugefügt haben? d. h. es zu der Liste anderer Plattformbibliotheken hinzufügen. Wenn Sie einen Include-Pfad für <imagehlp.h> hinzufügen mussten, finden Sie wahrscheinlich imagehlp.lib in einem Geschwisterverzeichnis.

+0

Ich habe es getan. aber immer noch dieselben Fehler. Gibt es eine Möglichkeit zu überprüfen, welche Version der DLL es benötigt. weil ich arbeite auf Windows 10 64-Bit-Maschine und bereits System hat viele imagehlp.dll in vielen Ordnern wie system32. – Abhi

+0

ImageHlp hat viele Versionen durchlaufen und wird viel mit anderen Tools neu verteilt. Jedoch ist die spezifische DLL (noch) nicht Ihr Problem, da es die Importbibliothek (.lib) nicht verbindet. Es sieht aus, als ob Sie für 32bit x86 kompilieren, aber möglicherweise die Importbibliothek für die 64-Bit-DLL gewählt haben - ich habe als Geschwisterverzeichnisse "\ x32 \ ImageHlp.Lib" und "\ x64 \ ImageHlp.Lib". –

0

Mingw64 hat die Fähigkeit, direkt mit der DLL zu verbinden, die ein bisschen langsamer ist, aber weniger fehleranfällig als msvc import libs - die scheint inkompatibel mit den letzten Mingw64 mehr als oft nicht. Stellen Sie sicher, dass die DLL als Ziel aufgeführt ist (oder als -L-limagehlp, wenn das funktioniert) nach alle Objekte/Quellen, die davon abhängen.