2

Ubuntu でV8をコンパイルし、isolate_test.cc という非常に単純な V8 プログラムを作成しました。これは、Google の Hello World の例に基づいています。

#include <v8.h> 
using namespace v8;

int main(int argc, char* argv[]) {

    V8::initialize();
    Isolate* isolate = Isolate::GetCurrent(); //Always returns NULL

    return 0; 
}

このプログラムをコンパイルするために使用するコマンドは次のとおりです。

g++ -Iinclude -g isolate_test.cc -o isolate_test -Wl,--start-group out/x64.debug/obj.target/{tools/gyp/libv8_{base,snapshot},third_party/icu/libicu{uc,i18n,data}}.a -Wl,--end-group -lrt -lpthread

問題はIsolate::GetCurrent()常に返品NULLです。なぜこれが起こるのですか?現在の正しい取得方法は何Isolateですか?

私は軌道から外れている可能性がありますが、最初に考えたのは、これはIsolate::GetCurrent()から現在のスレッドを取得できないことに関連しているということlibpthreadです。

更新:この質問に従って、プログラムの最初の呼び出しとして追加V8::initialize()しましたが、これで問題は解決しません。

4

2 に答える 2

3

同じ問題があります。根本的な理由はよくわかりませんが、ここで NULL は、デフォルトの分離が作成および入力されなかったことを意味します。明らかな回避策は、手動で行うことです

Isolate* isolate = Isolate::GetCurrent(); // returns NULL
if (!isolate) {
    isolate = Isolate::New();
    isolate->Enter();
}
于 2014-06-23T13:08:26.090 に答える
2

デフォルトの分離は v8 から削除されました。その結果、GetCurrent()はデフォルトで初期化されなくなりました。

変更の問題は次のとおりです: https://code.google.com/p/chromium/issues/detail?id=359977

于 2015-11-17T21:19:40.250 に答える