nodejs调c/c++
当前环境
- mac
不同环境下动态库的类型不一样windows下是.dll,linux下是.so,mac下是.dylib。但本质上都是通过c/c++编译得到的。
原理:先将C编译成动态库,ffi再调用动态库来实现nodejs调用c/c++
编写C代码
// add.c
int add(int a,int b)
{
return a+b;
}
int axb(int a,int b)
{
return a*b;
}
编译c为dylib
gcc -dynamiclib add.c -o add.dylib
node调用dylib
- 安装ffi
npm i ffi -s
- 编写调用dylib的js
const ffi = require('ffi');
const path = require('path')
const dllPath = path.resolve(__dirname,'./cpp/libadd.dylib');
var lib = ffi.Library(dllPath, {
'add': [ 'int', [ 'int','int' ]],
'axb': [ 'int', [ 'int','int' ]],
});
console.log(lib.add(3,6));// 9
console.log(lib.axb(3,6));// 18
其他
- mac下系统动态库在
/usr/lib
可创建软连到自己的动态库下就不用指定dylib的路径了