node-gyp构建错误“在mac上调用类'v8 :: HandleScope'的受保护构造函数”

时间:2017-04-19 02:25:37

标签: c++ node.js v8 node-gyp

我使用node-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好的。 运行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

node-gyp:3.6.0

xcode:8.1

mac:10.12.4

GCC: 配置为: - prefix = / Applications / Xcode.app / Contents / Developer / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1 Apple LLVM 8.0.0版(clang-800.0.42.1) 目标:x86_64-apple-darwin16.5.0 线程模型:posix InstalledDir:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

1 个答案:

答案 0 :(得分:0)

我已经解决了。因为demo中的c ++代码已经过时了。

新代码如:

ListView

网上有太多过时的例子,我会保留这个问题