[英]How do I build Google Crashpad into Shared (Dynamic) Libraries?
問題總結
我正在嘗試將崩潰報告系統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
我嘗試過的
這個StackOverflow問題回答了相同的問題,建議您可以簡單地修改輸出的.ninja文件的鏈接標志(/ MT更改為/ MD)。 但是,對所有輸出文件進行grepping顯示不存在此類標志。
Backtrace集成指南 此處提供了指向預先創建的動態(共享)的rashpad庫的鏈接。 但是,他們似乎已經使用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 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"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.