2

我从 NodeJS 核心(加密)中获取了一段简单的代码:

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]);
                                              ^

知道是什么原因造成的吗?

4

1 回答 1

3

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

在旧版本Buffer::Length中接受v8::Handle<v8::Object>,而在较新版本中,它接受v8::Handle<v8::Value>args[0].

提交更改签名:https ://github.com/joyent/node/commit/c8c638a84195e5571f4ece881375909e1f4b82a8

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

于 2012-10-31T12:08:32.747 回答