问题摘要
我试图整合谷歌Crashpad ,崩溃报告系统(谷歌Breakpad的继任者),为软件套件,动态链接到其所有的外部库。 我的问题是Crashpad默认的是建立一个静态库-我需要动态地生成它。
克隆Crashpad后, GN是用于生成.ninja为构建文件。 构建命令如下:
$ gn gen out/Default
上述命令生成所有.ninja文件。
(除了)生成Visual Studio解决方案文件(的.sln),以下产生命令可以用来代替:
$ gn gen out/Default --ide=vs
编译:
$ ninja -C out/Default
我已经试过
这StackOverflow的问题回答了同样的问题,建议你可以简单地修改输出.ninja文件的链接标志(/ MT改为/ MD)。 然而,grepping在所有输出文件表明,没有这样的标志存在。
回溯集成指南具有预建crashpad动态(共享)库的链接在这里 。 然而,他们似乎已经建立了与Visual Studio 2017的库,使用较新的工具集(V141),比我可以使用。 我需要重新建立Crashpad动态链接,并使用Visual Studio 2015年(V140)。
输出:
$ 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"