我按照here的说明构建了V8静态库。现在我尝试使用它来创建示例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
个文件。我错过了什么?
答案 0 :(得分: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++
看到它之前,将由shell扩展,并将变为:
-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 \
包含您找到的库的显式绝对或相对文件名列表。然后 试试你的运气。
如果您找不到任何候选人,那么您要遵循的文档 与你正在使用的构建树完全没有关系。