В V8 почему Isolate::GetCurrent() возвращает NULL?

Я скомпилировал V8 в Ubuntu и у меня есть очень простая программа V8 с именем isolate_test.cc. Он основан на примере Hello World от Google:

#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() как первый вызов в программе, однако это не решает проблему.

2 ответа

Решение

У меня такая же проблема. Я на самом деле не знаю основную причину, но NULL здесь означает, что изолят по умолчанию не был создан и введен. Очевидный обходной путь - сделать это вручную

Isolate* isolate = Isolate::GetCurrent(); // returns NULL
if (!isolate) {
    isolate = Isolate::New();
    isolate->Enter();
}

Изолят по умолчанию был удален из v8. В следствии, GetCurrent() больше не инициализируется по умолчанию.

Вот проблема изменения: https://code.google.com/p/chromium/issues/detail?id=359977

Другие вопросы по тегам