如何建立谷歌Crashpad到共享(动态)库?(How do I build Google Cras

2019-10-28 15:23发布

问题摘要

我试图整合谷歌Crashpad ,崩溃报告系统(谷歌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的问题回答了同样的问题,建议你可以简单地修改输出.ninja文件的链接标志(/ MT改为/ MD)。 然而,grepping在所有输出文件表明,没有这样的标志存在。

  2. 回溯集成指南具有预建crashpad动态(共享)库的链接在这里 。 然而,他们似乎已经建立了与Visual Studio 2017的库,使用较新的工具集(V141),比我可以使用。 我需要重新建立Crashpad动态链接,并使用Visual Studio 2015年(V140)。

Answer 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二千○一十七分之二千○一十五编译器,可以在添加/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"



文章来源: How do I build Google Crashpad into Shared (Dynamic) Libraries?