首页 > 语言 > JavaScript > 正文

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

2024-05-06 16:18:42
字体:
来源:转载
供稿:网友

本文给大家介绍的是在window7下使用C++来给node.js编写扩展模块的方法,附上一个简单的hello实例,有需要的小伙伴可以参考下。

前提: 安装好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,内容如下:

 

 
  1. #include <node.h> 
  2. using namespace v8; 
  3.  
  4. Handle<Value> Hello(const Arguments& args) { 
  5. HandleScope scope; 
  6. return scope.Close(String::New("Hello world!")); 
  7.  
  8. void init(Handle<Object> target) { 
  9. NODE_SET_METHOD(target, "hello", Hello); 
  10.  
  11. 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!大神们,谁能给出一个正确的解释?!

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选