开源!移植nodejs v22.19.0版本到OpenHarmony 6.0r

笔者之前将nodejs v16版本移动到OpenHarmony中,https://laval.csdn.net/66eb98f482931a478cff579f.html 。鉴于OpenClaw是基于Node.js开发的,而且要求nodejs版本大于等于v22版本。所以笔者移植了nodejs v22.19.0版本到OpenHarmony 6.0r中。现开源如下:

OpenClaw是2026年初迅速走红的开源AI智能体(AI Agent)框架。它的核心特点是让AI不仅能对话,还能直接操作你的电脑,替你完成各种实际任务

编译步骤

javascript 复制代码
# 编译nodejs v22版本需要gcc 12版本
sudo apt update
sudo apt install gcc-12 g++-12

git clone https://gitee.com/OpenHarmony_rk_equipment_transplantation/ttyd_openharmony.git

cd ttyd_openharmony/lycium
# 设置OpenHarmony 6.0r ndk环境变量
export OHOS_SDK=/home/jjh/ohos/6.0r_tag_mesa3d/prebuilts/ohos-sdk/linux/20
# 开始编译nodejs v22.19.0 arm64-v8a版本
./build.sh nodejs_22_19_0

编译产物在ttyd_openharmony/lycium/usr/nodejs_22_19_0目录下

编译好之后,如何在OpenHarmony部署,请参考笔者之前的文章 https://laval.csdn.net/66eb98f482931a478cff579f.html

移植思路和原理

1.思路还是采用oh ndk交叉编译

然后修改源码进行适配

javascript 复制代码
# node-v22.19.0下载地址
https://nodejs.org/dist/v22.19.0/node-v22.19.0.tar.gz

# 编译nodejs22版本需要gcc 12
sudo apt update
sudo apt install gcc-12 g++-12

export CC_host="gcc-12"
export CXX_host="g++-12"
export AR_host="ar"
export RANLIB_host="ranlib"
export LINK_host="g++-12"

# 设置 ohos 64bit 库编译工具链环境变量 aarch64-linux-ohos
export OHOS_SDK=/home/jiajiahao/OpenHarmony/ndk/ohos-sdk/linux 
export AS=${OHOS_SDK}/native/llvm/bin/llvm-as
export CC="${OHOS_SDK}/native/llvm/bin/clang --target=aarch64-linux-ohos"
export CXX="${OHOS_SDK}/native/llvm/bin/clang++ --target=aarch64-linux-ohos"
export LD=${OHOS_SDK}/native/llvm/bin/ld.lld
export STRIP=${OHOS_SDK}/native/llvm/bin/llvm-strip
export RANLIB=${OHOS_SDK}/native/llvm/bin/llvm-ranlib
export OBJDUMP=${OHOS_SDK}/native/llvm/bin/llvm-objdump
export OBJCOPY=${OHOS_SDK}/native/llvm/bin/llvm-objcopy
export NM=${OHOS_SDK}/native/llvm/bin/llvm-nm
export AR=${OHOS_SDK}/native/llvm/bin/llvm-ar
export CFLAGS="-fPIC -D__MUSL__=1"
export CXXFLAGS="-fPIC -D__MUSL__=1"

cd node-v22.19.0
./configure --dest-cpu=arm64 --dest-os=linux --cross-compiling --openssl-no-asm --prefix=/home/jjh/ohos/nodejs/install

make -j 96 > build.log 2>&1
make install

为了方便读者编译,笔者提供了 https://gitee.com/OpenHarmony_rk_equipment_transplantation/ttyd_openharmony/tree/master/thirdparty/nodejs_22_19_0 进行集成编译。笔者可以根据以上步骤自行按步骤进行编译。

2.nodejs仓库中有支持OpenHarmony的pr------ https://github.com/nodejs/node/commit/215587feca#diff-421f93138f2b4ff08c8576afc62a193a7359950385d9f27a638a8613c394118b ,只是在
--dest-os=中添加了对openharmony参数的支持,由于不清楚其修改是否支持完整,所以笔者configure时还是使用--dest-os=linux参数。

经验总结与后续改进点

1.今年三月份左右OpenHarmony 6.1r将要发布,支持d3000m、p7885、rk3588等arm64-v8a平台,所以笔者将基本只维护nodejs arm64-v8a的编译。

2.目前只开源了nodejs v22.19.0的编译方法,应该需要像 https://gitee.com/OpenHarmony_Python/python_oh 一样提供将nodejs默认集成进入OpenHarmony并直接可以用的方法。