2

问题总结

我正在尝试将Google Crashpad(Google Breakpad 的继任者)一个崩溃报告系统集成到一个动态链接到其所有外部库的软件套件中。我的问题是 Crashpad 的默认设置是构建为静态库 - 我需要动态构建它。

克隆 Crashpad 后,使用GN为构建生成.ninja文件。构建命令如下:

$ gn gen out/Default

上面的命令生成所有的 .ninja 文件。

(旁白)要生成 Visual Studio 解决方案文件 (.sln),可以使用以下生成命令:

$ gn gen out/Default --ide=vs

编译:

$ ninja -C out/Default

我试过的

  1. 这个 StackOverflow Question回答了同样的问题,建议您可以简单地修改输出的 .ninja 文件的链接标志(/MT 更改为 /MD)。但是,对所有输出文件进行 grepping 显示不存在此类标志。

  2. Backtrace 集成指南有一个链接,指向预建的动态(共享)crashpad。但是,他们似乎使用 Visual Studio 2017 构建了这些库,使用的工具集 (v141) 比我可以使用的更新。我需要重新构建 Crashpad 以进行动态链接,并使用 Visual Studio 2015 (v140)。

4

1 回答 1

1

输出:

$ gn gen out/Default

将创建一个名为toolchain.ninja的文件,其中包含告诉您指定的编译器如何编译您的项目的行。在 Crashpad 的情况下,它们看起来像这样:

rule cc command = ninja -t msvc -e environment.amd64 -- cl.exe /nologo /showIncludes ${defines} ${include_dirs} ${cflags} ${cflags_c} /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_c.pdb" description = CC ${out} deps = msvc

rule cxx command = ninja -t msvc -e environment.amd64 -- cl.exe /nologo /showIncludes ${defines} ${include_dirs} ${cflags} ${cflags_c} /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_cc.pdb" description = CXX ${out} deps = msvc

对于 Visual Studio MSVC 2015 / 2017 编译器,您可以将/MD标志添加到command上面的每一行。这将动态编译库。例如:

command = ninja -t msvc -e environment.amd64 -- cl.exe /MD /nologo /showIncludes ${defines} ${include_dirs} ${cflags} ${cflags_c} /c ${in} /Fo${out} /Fd"${target_out_dir}/${label_name}_cc.pdb"

于 2019-08-16T22:32:06.110 回答