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

标签 node.js buffer v8 node-gyp

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

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

但是,当在我自己的 native 扩展中使用 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]);
                                              ^

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

最佳答案

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

旧版本中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>()

关于node.js - node-gyp 在关于不兼容类型的基本 Buffer::Length 操作上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13157195/

相关文章:

C++ 调用未初始化的变量

用于 WebSocket 流式客户端应用程序的 Java/JVM 或 Node.js/V8?

java - 解析 ByteBuffer 寻找空格

javascript - Google 的 V8 引擎真的限制每个进程 1 个 VM 吗?

javascript - 提交后如何将数据从 express 传递到脚本标签?

node.js - Node 现在 express

mysql - 输出为 [object SequelizeInstance :transaction] than json object

node.js - Mongoose Schema 设置过期字段来删除文档?

Java 音频字节缓冲区需要不同的时间来填充

android - 将数据写入 Android 音频插孔