2

here にあるように、GoogleのV8の基本的な「Hello World」の例に従おうとしています。私はUbuntu 13.10、gccバージョン4.8.1を使用しています。これは簡単なはずですよね?

v8 自体をビルドし、hello world .cpp ファイルを作成した後、実行します (Google が提案するとおり **)。

**更新: わかりました。以下の受け入れられた回答に対する私のコメントによると、ファイル名の中括弧は、 構文ではなく 1 つのオプションを選択するよう読者に指示していると考えたため、無意識のうちに 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 に答える