nodejs调c/c++
当前环境
- mac
不同环境下动态库的类型不一样windows下是.dll,linux下是.so,mac下是.dylib。但本质上都是通过c/c++编译得到的。
原理:先将C编译成动态库,ffi再调用动态库来实现nodejs调用c/c++
编写C代码
// add.cint 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));// 9console.log(lib.axb(3,6));// 18
其他
- mac下系统动态库在
/usr/lib可创建软连到自己的动态库下就不用指定dylib的路径了
