V8“Hello World”示例 - 在Ubuntu 13.10上编译 - 大量未定义的引用错误“icu_46”

时间:2013-10-26 03:43:54

标签: c++ ubuntu v8

我正在尝试按照发现here的Google V8的基本“hello world”示例。我在Ubuntu 13.10,gcc版本4.8.1;这应该是直截了当的,不是吗?

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

** 更新:好的,根据我对下面接受的答案的评论,我无意中没有像谷歌建议那样运行它,因为我认为文件名中的大括号是读者选择的指示一个选项,而不是一个 syntax that g++ would understand。尽管如此,除了下面的答案中提出的补充

之外,它仍然不起作用
   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)'

我在这上面无休止地搜索并发现其他人遇到问题但没有解决方案的迹象。任何帮助将非常感激。谢谢。

1 个答案:

答案 0 :(得分: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