C++ V8";“你好,世界”;示例-在Ubuntu 13.10上编译-大量未定义的引用错误”;icu“U 46”;

C++ V8";“你好,世界”;示例-在Ubuntu 13.10上编译-大量未定义的引用错误”;icu“U 46”;,c++,ubuntu,v8,C++,Ubuntu,V8,我正试图遵循谷歌V8的基本“hello world”示例。我使用的是Ubuntu 13.10,gcc版本4.8.1;这应该是很前面的,不是吗 在构建v8本身并创建hello world.cpp文件之后, 我跑步(完全按照谷歌的建议**) **更新:好吧,根据我对下面被接受的答案的评论,我无意中并没有完全按照谷歌的建议运行它,因为我认为文件名中的大括号是指示读者选择一个选项,而不是一个选项 . 尽管如此,它仍然不起作用,除非在下面的答案中建议添加内容 并且被编译错误轰炸。这里有太多无法打印的错误

我正试图遵循谷歌V8的基本“hello world”示例。我使用的是Ubuntu 13.10,gcc版本4.8.1;这应该是很前面的,不是吗

在构建v8本身并创建hello world.cpp文件之后, 我跑步(完全按照谷歌的建议**)

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

并且被编译错误轰炸。这里有太多无法打印的错误,但几乎所有的错误都是这样的:

   undefined reference to 'icu_46 ...'
例如(一些采样线)

在谷歌搜索了很多之后,我发现这与所谓的ICU有关,但我不知道为什么会出错,我能做些什么

虽然大多数错误都与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)'
/home/ray/playerly/v8/out/x64.debug/obj.target/v8_base.x64/src/bootstrapper.o:在函数“v8::internal::bootstrapper::nativesourcelookup(int)”中:
/home/ray/playway/v8/out/。/src/bootstrapper.cc:77:对“v8::internal::NativesCollection::GetBuiltinCount()”的未定义引用
/home/ray/playway/v8/out/。/src/bootstrapper.cc:81:对“v8::internal::nativescolection::GetRawScriptSource(int)”的未定义引用
/home/ray/playway/v8/out/x64.debug/obj.target/v8_base.x64/src/bootstrapper.o:在函数“v8::internal::Genesis::CompileBuiltin(v8::internal::Isolate*,int)”中:
/home/ray/playway/v8/out/。/src/bootstrapper.cc:1448:对“v8::internal::NativesCollection::GetScriptName(int)”的未定义引用

我在谷歌上搜索了无数次,发现有迹象表明其他人也遇到了这个问题,但没有解决办法。任何帮助都将不胜感激。多谢各位

我在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

我自己还没有尝试过,但可能会将
`pkg config--libs--cflags-icu-io`
添加到编译行(包括后面的标记)。如果有必要,还可以运行
apt get install-y libicu dev
。谢谢Greg,这看起来很有希望,但实际上(奇怪的是)根本不会改变结果。您是否运行了
make dependencies
?@Andreas:是的,只是为了更好的衡量,又运行了一次。没什么区别。令人惊讶的是,它成功了(除了我还必须在命令末尾添加-lpthread)谢谢。作为将来的参考,你能帮助我理解你是如何发现的,以及除了向SO发帖之外,其他人可以采取哪些措施吗?:-)具体地说,我想知道谷歌的说明(在我最初的问题中)是否是错误的,或者是否在版本等方面有一些微妙之处。它在没有
-lpthread
的情况下对我有效。由于我不是C/C++开发人员,首先我了解了如何在编译时使用.so和.a文件,并且.a文件的顺序是有意义的。然后我尝试了不同的组合并仔细阅读日志(未定义的参考icu_46/未定义的参考rt)以找到这个解决方案。因此,这是命运、考验和错误的结合(以及谷歌缺乏解决方案:)这很有趣,没有
-lrt
它对我有效,但没有
-lpthread
;哦,这些模糊的东西。但我也意识到,我犯的另一个错误是假设文件名中的大括号是文档中表示“选择一个”的方式——我没有意识到g++会理解大括号并包含所有文件。也许我需要问另一个关于这个特性的问题,我在任何地方都找不到相关的文档…我犯了和你一样的错误(关于大括号)。作为将来的参考:大括号扩展,我想这是一个BASH特性
     /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)'
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