使用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 CSS修改学习第二章 样式
Feb 19 Javascript
javascript 节点遍历函数
Mar 28 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
Jul 10 Javascript
3种不同的ContextMenu右键菜单实现代码
Nov 03 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
May 07 Javascript
Vue.set 全局操作简单示例
Sep 19 Javascript
vue-resourc发起异步请求的方法
Feb 11 Javascript
基于vue--key值的特殊用处详解
Jul 31 Javascript
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 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
php adodb分页实现代码
2009/03/19 PHP
javascript 写类方式之七
2009/07/05 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
window.onload和$(function(){})的区别介绍
2013/10/30 Javascript
window.location 对象所包含的属性
2014/10/10 Javascript
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
Python多继承顺序实例分析
2018/05/26 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
浅谈Python __init__.py的作用
2020/10/28 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
生产现场工艺工程师岗位职责
2013/11/28 职场文书
总经理秘书工作职责
2013/12/26 职场文书
小学数学教学反思
2014/02/02 职场文书
事务机电主管工作职责
2014/02/25 职场文书
工作决心书范文
2014/03/11 职场文书
投标服务承诺书
2014/05/28 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
银行求职信范文怎么写
2015/03/20 职场文书
高中家长意见怎么写
2015/06/03 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python