准备工作

node使用c++插件时需要使用node-gyp包,node-gyp把c++源码编译为二进制文件,js在调用二进制文件,编译后的二进制文件模块调用就和js的模块调用一样。

npm install -g node-gyp

除了node-gyp还需要安装其他准备工具。

类Unix下的准备工具

在类Unix下只需在安装 g++工具

sudo apt-get install g++ ;
// or
sudo yum install g++

因为在学校里我把apt-get 配置为学校的源,回来后用不了学校的源(貌似只能在校园网的环境下使用),然后我再修改为其他源时只更改了地址,结果一直安装不上,,,最后的最后才发现我修改的apt源有问题,不仅需要修改地址,还要看下后面 trusty,precise还是其它的

// 之前的是:
deb http://**.xidian.edu.cn/ubuntu/ precise main xxxxxxxxxxxxxx // 修改时只改了地址,安装时就只会出错
deb http://mirrors.163.com/ubuntu/ precise main xxxxxxxxxxxxxxxx // 正确的是
deb http://mirrors.163.com/ubuntu/ trusty main xxxxxxxxxxxxxxxxx

Windows下准备工具

在Windows下需要安装python和visualC++ ,python在执行configure命令时调用,vcbuild在编译时使用

python安装2.7版本的

visual C++实在是太大了,所以网上有另外一种解决方式:

// 以管理员的身份运行   找到cmd,右键,以管理员身份运行;运行此命令后会安装python2.7 和编译工具
npm install --global --production windows-build-tools
npm update

编写C++模块

因为我对C++也不熟悉,所以从官网上拿个例子下来。存为 addon.cpp文件

#include <node.h>
namespace demo {
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
void Method(const FunctionCallbackInfo<Value>& args) { // Method方法,使用const FunctionCallbackInfo<Value>& args接受函数参数
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method); // 导出模块的hello属性,hello属性指向 Method方法 类似js里的 {hello: function Method(){}}
}
NODE_MODULE(addon, init) // 注意这里没有分号结尾 导出模块
}

配置与编译

node-gyp 配置文件

{
'targets': [
{
'target_name': 'addon', // 编译后为addon.node文件
'sources': ['./addon.cc'] // 需要编译的源码
}
]
}

node-gyp configure命令会在当前项目下生成项目文件(供编译时使用),node-gyp build 命令调用编译工具进行编译,最终得到一个node类型文件,该文件在 build/Release下,在这里生成的是addon.node文件

引用模块

新建test.js文件

let addon = require('./build/Release/addon.node');
console.log(addon.hello()); // 'world'

node-gyp 命令

命令 功能
install 安装开发文件,针对特定版本的node
list 当前安装的工具列表
remove 移除node特定版本的开发者文件
clean 移除所有用configure和build命令生成的文件
configure 为当前模块生成编译配置信息等
build 编译当前模块
rebuild 重新配置编译当前模块 相当于 clean ,configure, build的组合

c++更多示例请看官网 c/c++插件 或者百度网盘pdf版本

文档里提供了函数的参数、回调、对象工厂、函数工厂、包装c++对象、包装对象的工厂、传递包装的对象等列子。

node里面的c/c++模块的更多相关文章

  1. node里面的buffer理解

    node提供了专门读写文件的模块,文件内容都是2进制存放在内存中的 node读取文件的结果都是16进制,那么你要学会进制转换,二进制0b开头 ,八进制0开头,十六进制0x 基础知识: 1字节=8bit ...

  2. 关于ES7里面的async和await

    async / await是ES7的重要特性之一,也是目前社区里公认的优秀异步解决方案.目前,async / await这个特性已经是stage 3的建议,可以看看TC39的进度,本篇文章将分享asy ...

  3. procps包里面的sysctl命令

    procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...

  4. QVariant(相当于是Java里面的Object,起到一个数据类型“擦除”的作用,可以使用Q_DECLARE_METATYPE进行注册)

    =QVariant= [%这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是 ...

  5. node.js中使用http模块创建服务器和客户端

    node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...

  6. spring里面的ioc的理解?

    spring里面的ioc就是控制反转,其实现核心是DI(依赖注入),控制反转不向以前java代码里面,通过new关键字来实现创建对象,这样每段代码之间的耦合度就比较高,为了降低每个小模块之间的耦合度, ...

  7. 深入理解js里面的this

    闲聊两句(可以忽略): 毕业有半年了,时间还过得真快,不过还好,感觉自己相对于刚毕业那会确实成长了很多:好久没有打游戏了(自己决心要戒掉的),消磨时光的时候就看看电影或者追追电视剧,再无聊就洗洗衣服. ...

  8. QVariant(相当于是Java里面的Object,是万能的容器,但要注册)

    这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是int,也可以是一个颜色值 ...

  9. 方阵里面的dp

    打了一场luogu的信心赛,惊讶地发现我不会T2,感觉像这样在矩阵里面的dp看起来很套路的样子,但是仔细想想还是有很多需要注意的细节. 又想到之前貌似也考过一些类似的题目 然而我并没有改 ,于是打算补 ...

随机推荐

  1. MySQL-FAQ

    1.ERROR 1130: Host 'xxx' is not allowed to connect to this MySQL server远程连接mysql服务器报上述错误.解决方法:1.改表法. ...

  2. centos7安装nodejs

    方法一.https://github.com/nodesource/distributions#rpminstall 按照上面地址中的教程安装完后,使用node -v命令报错: -bash: /usr ...

  3. 输入三个整数x、y、z,请把这三个数由小到大输出

    题目:输入三个整数x,y,z,请把这三个数由小到大输出. 程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> ...

  4. jQuery点击缩略图切换大图代码

    很多网站上都会有点击缩略图切换成大图的效果,下面来分享一下它的源码 还是先来看效果截图 运行文件 然后点击下一张 下面分享源代码 html文件 <!DOCTYPE html PUBLIC &qu ...

  5. css动画属性--轮播图效果

    通过css的动画属性实现轮播图的显示效果 代码如下: 主体部分: <div id="move"> <ul> <li><img src=&q ...

  6. 【高斯消元】兼 【期望dp】例题

    [总览] 高斯消元基本思想是将方程式的系数和常数化为矩阵,通过将矩阵通过行变换成为阶梯状(三角形),然后从小往上逐一求解. 如:$3X_1 + 2X_2 + 1X_3 = 3$ $           ...

  7. GIT - 代码管理工具之命令集

    GIT 是一个快速.可扩展的分布式版本控制系统,它具有极为丰富的命令集,对内部系统提供了高级操作和完全访问.它会把你的每次提交的文件的全部内容都会记录下来. GIT特点 速度 简单的设计 对非线性开发 ...

  8. (转)FastJson---高性能JSON开发包

    场景:javaBean对象转化为json对象! 1 Fastjson介绍 Fastjson是一个Java语言编写的JSON处理器,由阿里巴巴公司开发.1.遵循http://json.org标准,为其官 ...

  9. (转)Spring事务配置的五种方式

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  10. HDU 6034---Balala Power!(搜索+贪心)

    题目链接 Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He ...