2017-05-08 20 views
0

我已經構建了V8靜態庫,如解釋here所述。現在我試圖用它來創建一個示例HelloWorld應用程序。問題在於文檔沒有說我需要在示例項目中引用的構建中的哪些文件。他們只顯示了該項目如何能利用g++編譯:如何從「開始組...結束組」鏈接器選項構建文件列表

g++ -I. -Iinclude samples/hello-world.cc -o hello-world -Wl,--start-group \ 
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},\ 
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a \ 
-Wl,--end-group -lrt -ldl -pthread -std=c++0x 

我讀過一些關於g++選項,並假設從--start-group...--end-group鏈接器選項構建的文件列表是什麼,我需要在我的項目引用編譯時。但我不明白如何構建文件列表。我以爲會有像

out.gn/x64.release/obj/libv8_base 
out.gn/x64.release/obj/libv8_libbase 
... 

但他們不在那裏。相反,有文件夾:

out.gn/x64.release/obj/v8_base 
out.gn/x64.release/obj/v8_libbase 
out.gn/x64.release/obj/v8_external_snapshot 

... 

.obj文件。我錯過了什麼?

回答

1

的命令行片段:

-Wl,--start-group \ 
out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},\ 
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a \ 
-Wl,--end-group 

將由外殼擴展g++看到它之前,將成爲:

-Wl,--start-group \ 
out.gn/x64.release/obj/libv8_base.a \ 
out.gn/x64.release/obj/libv8_libbase.a \ 
out.gn/x64.release/obj/libv8_external_snapshot.a \ 
out.gn/x64.release/obj/libv8_libplatform.a \ 
out.gn/x64.release/obj/libv8_libsampler.a \ 
out.gn/x64.release/obj/third_party/icu/libicuuc.a \ 
out.gn/x64.release/obj/third_party/icu/libicui18n.a \ 
out.gn/x64.release/obj/src/inspector/libinspector.a \ 
-Wl,--end-group 

這將告訴g++請求連接,ld,鏈接 所有的靜態庫:

out.gn/x64.release/obj/libv8_base.a 
out.gn/x64.release/obj/libv8_libbase.a 
out.gn/x64.release/obj/libv8_external_snapshot.a 
out.gn/x64.release/obj/libv8_libplatform.a 
out.gn/x64.release/obj/libv8_libsampler.a 
out.gn/x64.release/obj/third_party/icu/libicuuc.a 
out.gn/x64.release/obj/third_party/icu/libicui18n.a 
out.gn/x64.release/obj/src/inspector/libinspector.a 

而且,因爲--start-group ... --end-group檢查 這套遞歸符號解析庫,直到 它產生任何新的未定義引用(而不是僅僅一次,以每個 ,按默認值)

如果構建樹不包含那一組靜態庫,然後 它可能是您正在構建的git分支不符合 以及您所關注的文檔。在這種情況下,你可以看看 有問題的靜態庫 - 八個*.a文件 - 別處 在你的樹並替換:

out.gn/x64.release/obj/{libv8_{base,libbase,external_snapshot,libplatform,libsampler},\ 
third_party/icu/libicu{uc,i18n},src/inspector/libinspector}.a \ 

你找到這些庫的明確的絕對或相對的文件名列表。然後 嘗試你的運氣與建設。

如果您找不到任何候選人,那麼您所遵循的文檔 無法用您正在使用的構建樹擊退。