2017-05-08 1 views
0

Ich habe V8 statische Bibliothek wie erklärt here erstellt. Jetzt versuche ich es zu verwenden, um eine HelloWorld Beispielanwendung zu erstellen. Das Problem ist, dass die Dokumente nicht sagen, welche Dateien aus dem Build ich in meinem Beispielprojekt referenzieren muss. Sie zeigen nur, wie das Projekt mit g++ kompiliert werden kann:Wie erstellt man eine Liste von Dateien aus der `Startgruppe ... Endgruppe` Linkeroption

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 

ich ein wenig über g++ Optionen gelesen haben und gehen davon aus, dass die Liste Dateien aufgebaut aus --start-group...--end-group Linker-Option ist das, was ich in meinem Projekt verweisen müssen beim Kompilieren . Aber ich verstehe nicht, wie man diese Liste von Dateien erstellt. Ich dachte, dass es Dateien wie

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

gibt Aber sie sind nicht da. Stattdessen gibt es Ordner:

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

... 

mit .obj Dateien. Was vermisse ich?

Antwort

1

Das Kommandozeilen-Fragment:

-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 

wird von der Shell erweitert werden, bevor g++ es sieht und werden:

-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++ Dies wird zeigen, den Linker zu beantragen, ld, zu verbinden alle statischen Bibliotheken:

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 

und auch wegen --start-group ... --end-group diesen Satz von Bibliotheken in Symbol Auflösung rekursiv zu untersuchen, bis ergibt es keine neuen undefinierte Referenzen (und nicht nur einmal in jeder um, wie pro Standard)

Wenn Ihr Build-Baum nicht der Fall ist enthalten diese Reihe von statischen Bibliotheken dann es kann sein, dass die git-Zweig, mit dem Sie bauen, ist nicht in Übereinstimmung mit der Dokumentation, die Sie folgen. In diesem Fall können Sie für die statischen Bibliotheken in Frage finden - die acht *.a Dateien - an anderer Stelle in Ihrem Baum und ersetzen:

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

mit einer Liste von expliziten absoluten oder relativen Dateinamen der Bibliotheken, die Sie finden. Dann versuchen Sie Ihr Glück mit einem Build.

Wenn Sie keine Kandidaten finden können, ist die Dokumentation, der Sie folgen hoffnungslos aus dem Gleichgewicht mit dem Build-Baum, mit dem Sie arbeiten.

Verwandte Themen