我正在尝试用MingW在Windows上的c ++ Qt中编写崩溃报告。我参考了https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c/
但我的代码没有编译并给出以下错误 -
我使用Qt 5.4.0 mingw在Windows 10上使用此代码。编译此代码时,我收到的错误很少。
错误:对_imp__SymInitialize@12′
error: undefined reference to
_ imp__SymGetModuleBase @ 8'的未定义引用
错误:对_imp__SymFunctionTableAccess@8′
error: undefined reference to
_ imp__StackWalk @ 36'的未定义引用
错误:未定义引用`_imp__SymCleanup @ 4'
这些错误来自以下代码。
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() );
}
imagehlp.dll负责上述功能。 有人可以告诉我如何解决这类错误。
提前致谢。
答案 0 :(得分:3)
看起来好像没有将imagehlp.lib
导入库添加到您的构建中?即将其添加到其他平台库的列表中。如果您必须为<imagehlp.h>
添加包含路径,那么您可能会在兄弟目录中找到imagehlp.lib
。
答案 1 :(得分:0)
Mingw64具有直接链接到dll的能力,它比msvc导入库慢一点但不易出错 - 这似乎与最近的mingw64不相容。确保dll被列为目标(或者-L -limagehlp,如果可行的话)在之后依赖于它的所有对象/来源。