node-gyp在关于不兼容types的基本Buffer :: Length操作上崩溃

我已经从NodeJS核心(encryption)取了一段简单的代码:

ASSERT_IS_BUFFER(args[0]); ssize_t klen = Buffer::Length(args[0]); 

但是,在我自己的本地扩展中编译node-gyp时,出现以下错误:

 ../deps/v8/include/v8.h:202:5: error: assigning to 'v8::Object *volatile' from incompatible type 'v8::Value *' TYPE_CHECK(T, S); ^ ../deps/v8/include/v8.h:145:37: note: expanded from macro 'TYPE_CHECK' *(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \ ^ ../src/openssljs.cc:300:33: note: in instantiation of function template specialization 'v8::Handle<v8::Object>::Handle<v8::Value>' requested here ssize_t klen = Buffer::Length(args[0]); ^ 

任何想法可能是什么原因造成的?

你从一个版本的节点(例如从HEAD)中取出这些行,但系统中的头文件属于其他版本的节点。

在旧版本中, Buffer::Length接受v8::Handle<v8::Object>而在新版本中,它接受与args[0]types匹配的v8::Handle<v8::Value>

承诺改变了签名: https : //github.com/joyent/node/commit/c8c638a84195e5571f4ece881375909e1f4b82a8

您可以更新安装在系统中的node.js,也可以使用显式强制转换: args[0].As<Object>()