簡體   English   中英

如何將Google Crashpad構建到共享(動態)庫中?

[英]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

我嘗試過的

  1. 這個StackOverflow問題回答了相同的問題,建議您可以簡單地修改輸出的.ninja文件的鏈接標志(/ MT更改為/ MD)。 但是,對所有輸出文件進行grepping顯示不存在此類標志。

  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM