C+中的碰撞报告+;在窗户上敲打 我试图用MingW在Windows上的C++ Qt上写碰撞报告。我引用了 但是我的代码没有编译并给出以下错误- 我在Windows10和Qt5.4.0 mingw上使用这段代码。在编译此代码时,我几乎没有遇到错误。 错误:未定义对的引用\u imp__SymInitialize@12′ 错误:未定义对imp的引用__SymGetModuleBase@8′ 错误:未定义对\u imp的引用__SymFunctionTableAccess@8′ 错误:未定义对imp的引用__StackWalk@36′ 错误:未定义对`\u imp的引用__SymCleanup@4'

C+中的碰撞报告+;在窗户上敲打 我试图用MingW在Windows上的C++ Qt上写碰撞报告。我引用了 但是我的代码没有编译并给出以下错误- 我在Windows10和Qt5.4.0 mingw上使用这段代码。在编译此代码时,我几乎没有遇到错误。 错误:未定义对的引用\u imp__SymInitialize@12′ 错误:未定义对imp的引用__SymGetModuleBase@8′ 错误:未定义对\u imp的引用__SymFunctionTableAccess@8′ 错误:未定义对imp的引用__StackWalk@36′ 错误:未定义对`\u imp的引用__SymCleanup@4',c++,c,windows,qt,mingw,C++,C,Windows,Qt,Mingw,这些错误来自以下代码 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

这些错误来自以下代码

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负责上述功能。 有人能告诉我如何解决这类错误吗


提前谢谢

看起来好像您没有将
imagehlp.lib
导入库添加到生成中?i、 e.将其添加到其他平台库的列表中。如果您必须为
添加包含路径,那么您可能会在同级目录中找到
imagehlp.lib

Mingw64可以直接链接到dll,这比msvc导入libs慢一点,但不太容易出错,它似乎多次与最新的Mingw64不兼容。确保dll在依赖于它的所有对象/源之后列为目标(或-L-limagehlp,如果可以的话)。

我这样做了。但还是有同样的错误。有没有办法检查它需要哪个版本的dll。因为我在windows 10 64位计算机上工作,并且系统在许多文件夹(如system32)中已经有许多imagehlp.dll。imagehlp已经经历了许多版本,并且确实通过其他工具重新分发了很多。但是,特定的DLL还不是您的问题,因为它无法链接导入库(.lib)。看起来您是在为32位x86编译,但可能已经为64位DLL选择了导入库-我将其作为同级目录“\x32\ImageHlp.Lib”和“\x64\ImageHlp.Lib”。