我是 V8 嵌入的新手,刚刚开始用 V8 库替换我当前的脚本语言。但是,我遇到了一些非常奇怪(至少对我而言)的问题。感觉就像我是唯一一个在做我正在做的事情的人,我觉得我在做一些愚蠢的事情。
我制作了一个包装器类来包装 V8 引擎函数并在构造我的包装器时构造引擎(尝试忽略糟糕的变量名或愚蠢的样式):
引擎.h:
namespace JSEngine {
class Engine
{
public:
Engine();
virtual ~Engine();
v8::Isolate* isolate;
v8::Handle<v8::Context> context;
};
}
engine.cpp(包括engine.h):
JSEngine::Engine::Engine()
{
v8::Locker locker();
V8::Initialize();
this->isolate = Isolate::GetCurrent();
HandleScope scope(this->isolate);
this->context = Context::New(this->isolate);
}
该代码很好而且很花哨,但是一旦我尝试了这个:
Server::jsEngine = new JSEngine::Engine();
HandleScope scope(Server::jsEngine->isolate);
Context::Scope context_scope(Server::jsEngine->context);
Handle<String> source = String::NewFromUtf8(Server::jsEngine->isolate, "'Hello' + ', World!'");
Handle<Script> script = Script::Compile(source);
Handle<Value> result = script->Run();
String::Utf8Value utf8(result);
printf("%s\n", *utf8);
我在这条线上得到 SEGMENTATION FAULT:Context::Scope context_scope(Server::jsEngine->context);
我不知道我做错了什么,或者这种方法是否是最佳实践。你能帮我解决 SEGMENTATION FAULT 错误吗?