2

我正在尝试遵循此处找到的 Google V8 的基本“hello world”示例。我在 Ubuntu 13.10,gcc 版本 4.8.1;这应该是直截了当的,不是吗?

在构建 v8 本身并创建 hello world .cpp 文件后,我运行(正如谷歌所建议的那样)

**更新:好的,根据我对下面接受的答案的评论,我无意中并没有完全按照 Google 的建议运行它,因为我认为文件名中的大括号是指示读者选择一个选项,而不是 语法那 g++ 会理解的。尽管如此,它仍然不起作用,除非在下面的答案中建议添加

   g++ -Iinclude helloworld.cpp -o hello_world out/x64.debug/obj.target/tools/gyp/libv8_base.x64.a -lpthread

并被编译错误轰炸。这里要打印的太多了,但几乎所有的错误都是以下形式:

   undefined reference to 'icu_46 ...'

例如(一些示例行)

   /home/ray/Playground/v8/out/../src/i18n.cc:138: undefined reference to `icu_46::UnicodeString::~UnicodeString()'
   /home/ray/Playground/v8/out/../src/i18n.cc:125: undefined reference to `icu_46::UnicodeString::~UnicodeString()'
   /home/ray/Playground/v8/out/../src/i18n.cc:147: undefined reference to `icu_46::UnicodeString::~UnicodeString()'

经过大量谷歌搜索后,我可以弄清楚这与称为 ICU 的东西有关(请参阅http://userguide.icu-project.org/howtouseicu)但为什么我会收到错误,以及我能做些什么,我不知道。

虽然大多数错误与 icu_46 相关,但也有一些类似的错误,来自“bootstrapper.o”:

     /home/ray/Playground/v8/out/x64.debug/obj.target/v8_base.x64/src/bootstrapper.o: In function `v8::internal::Bootstrapper::NativesSourceLookup(int)':
     /home/ray/Playground/v8/out/../src/bootstrapper.cc:77: undefined reference to `v8::internal::NativesCollection<(v8::internal::NativeType)0>::GetBuiltinsCount()'
     /home/ray/Playground/v8/out/../src/bootstrapper.cc:81: undefined reference to `v8::internal::NativesCollection<(v8::internal::NativeType)0>::GetRawScriptSource(int)'
     /home/ray/Playground/v8/out/x64.debug/obj.target/v8_base.x64/src/bootstrapper.o: In function `v8::internal::Genesis::CompileBuiltin(v8::internal::Isolate*, int)':
     /home/ray/Playground/v8/out/../src/bootstrapper.cc:1448: undefined reference to `v8::internal::NativesCollection<(v8::internal::NativeType)0>::GetScriptName(int)'

我无休止地在谷歌上搜索,发现其他人遇到了这个问题但没有解决方案的迹象。任何帮助将不胜感激。谢谢你。

4

1 回答 1

2

我在 Ubuntu 12.04、g++ 4.6.3 和 v8 3.22.18 上遇到了同样的问题。要成功编译 hello_world.cc,还需要添加 icu .a 库并链接到 rt 库。当您使用 make x64.debug 构建 v8 时,您完成的命令应该是:

g++ -Wall -Iinclude -o hello_world hello_world.cc ./out/x64.debug/obj.target/tools/gyp/libv8_{base.x64,snapshot}.a ./out/x64.debug/obj.target/third_party/icu/libicu{i18n,uc,data}.a -lrt
于 2013-11-04T09:36:58.283 回答