在Termux中编译Nodejs库node-ffi

Node-ffi 是一个 Nodejs 库,其中 FFIForeign Function Interface 的缩写。这个库的作用是方便程序员通过 Javascript 代码来调用 C/C++ 动态链接库。想在 termux 中使用它必须自行编译。下面给出编译流程。

由于最新的 nodejs 中原生模块的接口为 NAPI,因此请使用 node-ffi-napi 库。

编译步骤

1.下载项目到 Termux

如果手机上还没有 termux,请先安装 termuxnodejs 环境:termux的使用方法总结

1
2
3
4
5
6
7
8
# 安装 wget
$ pkg install wget

# 下载项目
$ wget -O ffi.zip https://github.com/node-ffi-napi/node-ffi-napi/archive/refs/tags/v4.0.3.zip

# 解压
$ unzip ffi.zip

2.安装编译环境

1
2
# node-ffi-napi 使用 node-gyp 来编译原生插件,依赖 python
$ pkg install binutils python3

3.修改代码并编译

1
$ cd node-ffi-napi-4.0.3
1
2
3
4
5
# 修改源文件 lib/Library.js 第 21 行
'sunos' 修改为 'android'

# 修改源文件 deps/libffi/libffi.gyp 第 152 行
OS=="mac" 修改为 OS=="android"
1
2
3
4
5
# 复制头文件
$ cp -r ./deps/libffi/config/linux ./deps/libffi/config/android

# 执行 npm install 会自动安装项目依赖并编译项目
$ npm install

编译成功后会在项目目录下生成 build/Realease/ffi_bindings.node 文件

使用方法

1
2
# 返回 node-ffi-napi-4.0.3 上一级目录
$ cd ../
1
2
3
4
5
6
7
8
// libm.js
var ffi = require('./node-ffi-napi-4.0.3');

var libm = ffi.Library('libm', {
'ceil': ['double', ['double']]
});

console.log(libm.ceil(1.5));
1
2
$ node libm.js
# 输出 2 表示调用成功

参考资料
Node.js使用ffi-napi调用动态库
Node.js 使用 FFI 调用 win32 API
Electron中使用Node-ffi模拟键鼠操作
从暴力到 NAN 再到 NAPI——Node.js 原生模块开发方式变迁


在Termux中编译Nodejs库node-ffi
https://blog.itfox.net/posts/在termux中编译nodejs库node-ffi.html
作者
blog.itfox.net
发布于
2023年6月10日
许可协议