您好,欢迎访问沃航(武汉)科技有限公司官方网站
nodejs通过n api开发C语言模块(一)
2019-06-25 01:49:40

nodejs开发直接能调用C的模块方式,从nodejs出现至今已经经历了几代了,目前最先进的方式就是n api方式了。他的好处在于不依赖v8引擎的api。因此v8引擎的api变化不会影响调用C模块,今天我们就先讲讲如何搭建开发环境。

在windows下:

首先,通过命令安装node-gyp

npm install -g node-gyp

然后安装windows开发包

npm install -g windows-build-tools

注意,如果是win7系统,这一步是非常慢的,原因是vs2015体积太大了,好几个G。

然后去C:\Users\[用户名]\.windows-build-tools下,将python添加到环境变量中。

注意:这里有个小技巧,如果觉得安装vs2015太慢,可以安装一半停掉进程,然后通过应用程序管理删除安装了一半的vs2015。

最后再手动点击C:\Users\[用户名]\.windows-build-tools下的安装包。

在linux下:

依次安装python2.7,make以及gcc即可。


下面教大家写一个最小的nodejs的C语言模块。

首先建立一个文件名为binding.gyp,内容如下:

{
  "targets": [{
    "target_name": "test",
    "sources": [
      "test.c"
    ]
  }]
}

这很简单,就是编译文件test.c,test.c文件如下:

#include <stdio.h>
#include <node_api.h>

napi_value Test(napi_env env, napi_callback_info info) {
    printf("%s %s", __DATE__, __TIME__);
    return NULL;
}

napi_value Init(napi_env env, napi_value exports) {
    napi_value fn;
    if (napi_create_function(env, NULL, 0, Test, NULL, &fn) != napi_ok) return NULL;
    if (napi_set_named_property(env, exports, "Test", fn) != napi_ok) return NULL;
    return exports;
}

NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

编译命令如下:

node-gyp configure
node-gyp build

其中node-gyp configure只需要执行一次即可。


注意:这里会有一个容易发生的错误,那就是提示找不到node-gyp.js文件

解决方式很简单,寻找到node-gyp.js这个文件,通常在C:\Users\[用户名]\AppData\Roaming\npm\node_modules\node-gyp\bin\node-gyp.js

然后设置环境变量npm_config_node_gyp为node-gyp.js文件的完整路径即可。


编译好后,会在build/Release目录下生成一个test.node文件。

调用这个文件的方法如下:

let ts = require('./test.node')
ts.Test()

注意,如果只写require('./test')也是可以的,但是如果目录下有个test.js文件,会优先调用js文件,node文件就调用不到了。所以建议写全。


文章作者:沃航科技


联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn