使用C++为node.js写扩展模块


Posted in Javascript onApril 22, 2015

前提: 安装好node.js、Python2.7与visual studio 2013。

过程:
首先安装GYP项目生成工具,npm install -g node-gyp 。
建立test目录,这是我们的工作目录,在此目录下再建一个src目录,用来存放C++源代码,另新建一个名为binding.gyp的文本文件,这是gyp的项目文件,内容如下:

{

    'targets':[{

        'target_name':'hello',

        'sources':['src/hello.cc']

    }]

}

再写一个简单的hello.cc,内容如下:

#include <node.h>
using namespace v8;

Handle<Value> Hello(const Arguments& args) {
 HandleScope scope;
 return scope.Close(String::New("Hello world!"));
}

void init(Handle<Object> target) {
 NODE_SET_METHOD(target, "hello", Hello);
}

NODE_MODULE(hello, init)

然后运行命令: node-gyp configure
如果正确运行的话,会出现一个目录----build,其下为你生成了vs2013的项目文件,这样就可以在vs2013中进行编辑与编译了。
当然也可以直接用命令 node-gyp build进行编译。

测试js程序如下:

var hello = require('./hello');

console.log(hello.hello());

其中遇到了一些问题,记录如下:

1、C:\Users\Administrator.node-gyp\0.10.33这个目录下,没有默认Debug目录,在vs2013中编译成debug文件时会提示 error LNK1104: cannot open file 'C:\Users\Administrator.node-gyp\0.10.33\Debug\node.lib' ,建立一个Debug目录,把与你操作系统环境相同的目录下的node.lib拷贝到其中就好了。

2、NODE_MODULE(hello, init)中的hello是模块名,需要与文件名保持一致,不然编译没问题,运行时会出错。因为在require('./hello.node')时,既去找相应的文件,也匹配对应的MODULE。

3、我是对应着朴灵的《深入浅出node.js》这本书,并参考一些网页进行学习的,书给出的gyp项目文件中有一个conditions项,'libraries' : ['-lnode.lib'] ,因为这一句,编译时一直报错:can't open node.lib,明明文件是存在的,但就是报错,找了很多资料,也没解决,后来我把node.lib直接拷贝到工作目录下,用命令行编译成功了!但在vs2013中,错误还是依旧,我怎么想都不对,最后上官网,发现人家的例子都没有给出这种参数,我就试着把这个东东删除了,结果一切OK!大神们,谁能给出一个正确的解释?!

以上所述上就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
javascript Math.random()随机数函数
Nov 04 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
Jan 12 Javascript
Jquery多选框互相内容交换的实例代码
Jul 04 Javascript
JavaScript限定图片显示大小的方法
Mar 11 Javascript
基于jQuery实现二级下拉菜单效果
Feb 01 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
微信小程序模板之分页滑动栏
Feb 10 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
浅谈vue中$bus的使用和涉及到的问题
Jul 28 Javascript
利用H5api实现时钟的绘制(javascript)
Sep 13 Javascript
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
node.js 使用ejs模板引擎时后缀换成.html
Apr 22 #Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 #Javascript
jscript读写二进制文件的方法
Apr 22 #Javascript
javascript格式化json显示实例分析
Apr 21 #Javascript
JavaScript汉诺塔问题解决方法
Apr 21 #Javascript
JavaScript让网页出现渐隐渐显背景颜色的方法
Apr 21 #Javascript
JavaScript实现动画打开半透明提示层的方法
Apr 21 #Javascript
You might like
windows8.1下Apache+Php+MySQL配置步骤
2015/10/30 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
js输出列表实现代码
2010/09/12 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JavaScript实现表格快速变色效果代码
2015/08/19 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
微信小程序使用map组件实现检索(定位位置)周边的POI功能示例
2019/01/23 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
python 切片和range()用法说明
2013/03/24 Python
Python下singleton模式的实现方法
2014/07/16 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
Python制作Windows系统服务
2017/03/25 Python
python3人脸识别的两种方法
2019/04/25 Python
Python绘图Matplotlib之坐标轴及刻度总结
2019/06/28 Python
python实现在函数图像上添加文字和标注的方法
2019/07/08 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
python实现静态服务器
2019/09/05 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
简述 Python 的类和对象
2020/08/21 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
美国男士和女士奢侈品折扣手表购物网站:Certified Watch Store
2018/06/13 全球购物
员工自我鉴定范文
2013/10/06 职场文书
《三峡》教学反思
2014/03/01 职场文书
节水倡议书范文
2014/04/15 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android