Mac 上的 node-gyp 构建错误"calling a protected constructor of class 'v8::HandleScope'"



我使用节点gyp来构建我的C 库,并在网上复制一些示例。

callback.cc

#include <node.h>
#include <v8.h>
using namespace v8;
Handle<Value> Method(const v8::internal::Arguments& args){
  HandleScope scope;
  return scope.Close(String::New("hello,world"));
}
void init(Handle<Object> exports) {
  exports->Set(String::NewSymbol("hello"),FunctionTemplate::New(Method)->GetFunction());
}
NODE_MODULE(hello, init)

binding.gyp

{
  "targets": [
    {
      "target_name": "hello",
      "sources": [ "callback.cc" ]
    }
  ]
}

运行node-gyp configure OK。运行node-gyp build失败,错误:

gyp info it worked if it ends with ok
gyp info using node-gyp@3.6.0
gyp info using node@7.9.0 | darwin | x64
gyp info spawn make
gyp info spawn args [ 'BUILDTYPE=Release', '-C', 'build' ]
  CXX(target) Release/obj.target/hello/callback.o
../callback.cc:5:15: error: calling a protected constructor of class 'v8::HandleScope'
  HandleScope scope;
          ^
/Users/zhouweiming/.node-gyp/7.9.0/include/node/v8.h:908:13: note: declared protected here
  V8_INLINE HandleScope() {}
        ^
../callback.cc:6:16: error: no member named 'Close' in 'v8::HandleScope'
  return scope.Close(String::New("hello,world"));
     ~~~~~ ^
../callback.cc:6:30: error: no member named 'New' in 'v8::String'
  return scope.Close(String::New("hello,world"));
                 ~~~~~~~~^
../callback.cc:9:65: error: cannot initialize a parameter of type 'v8::Isolate *' with an lvalue of type 'Handle<v8::Value> (const v8::internal::Arguments &)'
  (aka 'v8::Local<v8::Value> (const v8::internal::Arguments &)')
  exports->Set(String::NewSymbol("hello"),FunctionTemplate::New(Method)->GetFunction());
                                                            ^~~~~~
/Users/zhouweiming/.node-gyp/7.9.0/include/node/v8.h:5079:16: note: passing argument to parameter 'isolate' here
      Isolate* isolate, FunctionCallback callback = 0,
           ^
../callback.cc:9:24: error: no member named 'NewSymbol' in 'v8::String'
  exports->Set(String::NewSymbol("hello"),FunctionTemplate::New(Method)->GetFunction());
           ~~~~~~~~^
5 errors generated.
make: *** [Release/obj.target/hello/callback.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit     (/usr/local/lib/node_modules/.node-gyp_npminstall/node_modules/.node-    gyp@3.6.0/lib/build.js:285:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:194:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System Darwin 16.5.0
gyp ERR! command "/usr/local/Cellar/node/6.9.1/bin/node" "/usr/local/bin/node-gyp" "build"
gyp ERR! cwd /Users/zhouweiming/data/project/electron-projects/dll
gyp ERR! node -v v7.9.0
gyp ERR! node-gyp -v v3.6.0
gyp ERR! not ok 

我不是C 编码器,请帮助我。

节点:7.9.0

节点GYP:3.6.0

xcode:8.1

Mac:10.12.4

GCC:配置为: - prefix =/applications/xcode.app/contents/developer/usr -with-with-gxx-include-dir =/usr/include/include/c /4.2.1Apple LLVM版本8.0.0(Clang-800.0.42.1(目标:x86_64- apple-darwin16.5.0线程模型:POSIXinstalleddir:/applications/xcode.app/contents/developer/toolchains/xcodedefault.xctoolchain/usr/bin/pte/p>

我已经解决了它。因为演示中的C 代码已过时。

新代码如下:

#include <node/v8.h>
#include <node/node.h>
using namespace node;
using namespace v8;
void Method(const v8::FunctionCallbackInfo<v8::Value>& args) {
    v8::Isolate* isolate = args.GetIsolate();
    v8::HandleScope scope(isolate);
    args.GetReturnValue().Set(v8::String::NewFromUtf8(isolate, "Hello world"));
}
void init(v8::Local<v8::Object> target) {
    NODE_SET_METHOD(target, "hello", Method);
}
NODE_MODULE(binding, init);

网络上有太多过时的示例,我将保留此问题

相关内容

最新更新