1

给定:为 Qt Creator 编写的应用程序项目(4.7.4,仅限 Win32,gcc/MinGW)。

需要:插入著名的 Google breakpad 库以收集来自客户的详细故障转储。

我目前的发现如下:

  • 那里有breakpad-qt项目,大约两年了。它包含要使用 Qt Creator 构建的上游 breakpad 源的子树,因此我尝试通过构建它来生成工作示例。
  • DbgHelp.h由于使用了 Microsoft minidump 格式,breakpad 本身就依赖于Windows SDK。
  • DbgHelp.h可以在 Windows SDK 头文件中找到,但还包括一些来自 Visual Studio 的头文件,据报道这些头文件无法由 GCC/MinGW 编译(我想是 MSVS 编译器的不兼容语言扩展)。
  • google breakpad 包括 MSVS 解决方案文件(由 gyp 生成),并且可以通过 MSVS 轻松构建(我在 2008 和 2010 Express 版本上都成功了),生成了一些.lib与目标应用程序链接的 s。
  • 但是.lib上面编译的文件不被 MinGW 理解ld,所以无法与 Qt 项目链接。众所周知,库格式不兼容。
  • 但是,来自 MinGW 工具(最新可用).lib的工具可以理解 MSVS 2008(而不是 2010)的文件reimp,该工具旨在将库从 MSVS 格式转换为 MinGW 可用格式。在我的情况下,符号似乎正确导出,还有一些.obj文件,但是dlltoolMinGW 仍然无法链接重新编译的库(使用 MinGW)ld
  • 并且.lib链接的所有大惊小怪都被另一个问题所阻止:Qt Project 中需要有效的头文件才能编译客户端代码,而这些头文件正是来自 breakpad 的头文件,包括DbgHelp.h,见上文!

我看到的目前开放的替代方案:

  • 将应用程序从 Qt/MinGW (Creator) 完全切换到 Qt/MSVS,这可以允许直接链接上游 breakpad。我认为这是 Qt + breakpad 的小 googleable 用例成功的核心。
  • 构建一些混合方法,其中应用程序像往常一样使用 Creator 构建,然后通过 MSVS 链接器与 breakpad 链接。但又是头球!
  • 为了使用纯 Qt Creator 进行编译,从 Microsoft 标头中撕下 breakpad 所需的最小关闭。

有什么建议,现有的经验吗?

4

1 回答 1

0

很抱歉让您失望,但 QtBreakpad 集成尚未针对 MinGW 开发和测试。

于 2011-12-01T17:40:08.117 回答