微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

代码如下:

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

rush:cpp;"> #include using namespace v8;

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

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

NODE_MODULE(hello,init)

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

测试js程序如下:

代码如下:

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

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!大神们,谁能给出一个正确的解释?!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐