簡體   English   中英

node-gyp構建錯誤“在mac上調用類'v8 :: HandleScope'的受保護構造函數”

[英]node-gyp build error “calling a protected constructor of class 'v8::HandleScope'” on mac

我使用node-gyp為節點構建我的c ++庫,並在Web上復制一些示例。

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

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

我已經解決了。 因為demo中的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);

網上有太多過時的例子,我會保留這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM