给定:为 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
文件,但是dlltool
MinGW 仍然无法链接重新编译的库(使用 MinGW)ld
。 - 并且
.lib
链接的所有大惊小怪都被另一个问题所阻止:Qt Project 中需要有效的头文件才能编译客户端代码,而这些头文件正是来自 breakpad 的头文件,包括DbgHelp.h
,见上文!
我看到的目前开放的替代方案:
- 将应用程序从 Qt/MinGW (Creator) 完全切换到 Qt/MSVS,这可以允许直接链接上游 breakpad。我认为这是 Qt + breakpad 的小 googleable 用例成功的核心。
- 构建一些混合方法,其中应用程序像往常一样使用 Creator 构建,然后通过 MSVS 链接器与 breakpad 链接。但又是头球!
- 为了使用纯 Qt Creator 进行编译,从 Microsoft 标头中撕下 breakpad 所需的最小关闭。
有什么建议,现有的经验吗?