在烧了20亿token,这位爱好者做了一款信创版的“剪映”一文中,我提到借助 AI ,我们可以加快国产系统替代的进程。特别是对于龙芯架构的软件,从基础软件到上层软件,都非常缺乏。但是当我准备着手准备做一些龙芯架构的软件迁移时,却尴尬的发现,我在龙芯主机上根本就无法使用Claude Code、OpenCode 这样的 AI 编程工具。虽然我们可以在 X86 架构的开发机上将代码开发好,然后再同步到龙芯主机上编译、调试,但这样终归不太方便。因为Open Code 之类的 AI 可以做到写代码、编译、调试,能及时发现代码中的问题。
所以当务之急就是找一个 AI 编程工具能在龙芯主机上跑起来。研究了一下,Claude Code、OpenCode 都需要 nodejs 支持。
统信UOS V25系统已经有龙芯架构的 nodejs,安装起来也非常简单:
sudo apt install nodejs但安装后检查版本,版本不是很新:

很多 AI 工具,比如 OpenClaw,都要求 nodejs v22 以上版本。所以我们需要在 UOS 系统上安装新版本 nodejs。
龙芯官方也维护了一套 nodejs loong64 版本,项目地址:https://github.com/loong64/node。最新支持到 nodejs V26 版本,也提供了预编译二进制包下载。但预编译的 node 在 UOS V25 上运行却提示 `GLIBC_2.38' not found。这显然是 Linux 系统的老问题,glibc 版本不兼容,如果替换系统 glibc 库,代价太大,那还是从源码直接编译吧。
一、安装工具链
执行以下命令安装完整编译工具链:
sudo apt updatesudo apt install -y build-essential gcc g++ make python3 pkg-config libssl-dev zlib1g-dev libicu-dev git
二、下载 Node.js v24 源码
node 尽量选择 LTS 版本,最近比较新的 LTS 版本是 v24,所以这里选择了 v24.8.0,推荐使用国内镜像下载以提升速度,我这里使用了龙芯官方维护的源码包。
wget https://github.com/loong64/node/releases/download/v24.18.0/node-v24.18.0.tar.xz# 解压源码包tar -xzf node-v24.18.0.tar.gzcd node-v24.18.0
三、配置编译参数
针对 loong64 架构定制编译选项,指定独立安装目录,避免覆盖系统 nodejs 包。
./configure \ --dest-cpu=loong64 \ --openssl-no-asm \ --prefix=/usr/local/node-v24 \ --with-intl=system-icu
核心参数说明:
--dest-cpu=loong64:必填,指定目标架构为 LoongArch64--openssl-no-asm:关闭 OpenSSL 汇编优化,避免架构兼容性编译报错--prefix=/usr/local/node-v24:指定安装路径,方便后续管理与卸载--with-intl=system-icu:复用系统 ICU 国际化库,缩减编译体积与时间
四、执行编译与安装
编译耗时较长(龙芯 3A6000 约 40~60 分钟,3A5000 约 1.5 小时),请保持终端不中断。
make -j$(nproc)# 编译完成后安装到指定目录sudo make install
如果在 UOS V25 上编译出现如下错误:
In file included from ../deps/v8/third_party/highway/src/hwy/ops/scalar-inl.h:24, from ../deps/v8/third_party/highway/src/hwy/highway.h:600, from ../deps/v8/src/json/json-stringifier.cc:9:../deps/v8/third_party/highway/src/hwy/ops/shared-inl.h: In instantiation of ‘struct hwy::N_SCALAR::detail::FixedTagChecker<unsigned char, 16>’:../deps/v8/third_party/highway/src/hwy/ops/shared-inl.h:422:7: required by substitution of ‘template<class T, long unsigned int kNumLanes> using FixedTag = typename hwy::N_SCALAR::detail::FixedTagChecker::type [with T = unsigned char; long unsigned int kNumLanes = 16]’../deps/v8/src/json/json-stringifier.cc:3353:29: required from ‘bool v8::internal::FastJsonStringifier<Char>::AppendStringSIMD(const SrcChar*, size_t, const v8::internal::DisallowGarbageCollection&) [with SrcChar = unsigned char; Char = unsigned char; size_t = long unsigned int; v8::internal::DisallowGarbageCollection = v8::internal::PerThreadAssertScopeEmpty<false, v8::internal::SAFEPOINTS_ASSERT, v8::internal::HEAP_ALLOCATION_ASSERT>]’../deps/v8/src/json/json-stringifier.cc:3290:28: required from ‘bool v8::internal::FastJsonStringifier<Char>::AppendString(const SrcChar*, size_t, const v8::internal::DisallowGarbageCollection&) [with SrcChar = unsigned char; Char = unsigned char; size_t = long unsigned int; v8::internal::DisallowGarbageCollection = v8::internal::PerThreadAssertScopeEmpty<false, v8::internal::SAFEPOINTS_ASSERT, v8::internal::HEAP_ALLOCATION_ASSERT>]’../deps/v8/src/json/json-stringifier.cc:2510:17: required from ‘v8::internal::FastJsonStringifierResult v8::internal::FastJsonStringifier<Char>::SerializeString(v8::internal::Tagged<v8::internal::HeapObject>, const v8::internal::DisallowGarbageCollection&) [with StringT = v8::internal::SeqOneByteString; Char = unsigned char; v8::internal::DisallowGarbageCollection = v8::internal::PerThreadAssertScopeEmpty<false, v8::internal::SAFEPOINTS_ASSERT, v8::internal::HEAP_ALLOCATION_ASSERT>]’../deps/v8/src/json/json-stringifier.cc:2533:47: required from ‘v8::internal::FastJsonStringifierResult v8::internal::FastJsonStringifier<Char>::TrySerializeSimpleObject(v8::internal::Tagged<v8::internal::Union<v8::internal::Smi, v8::internal::HeapNumber, v8::internal::BigInt, v8::internal::String, v8::internal::Symbol, v8::internal::Boolean, v8::internal::Null, v8::internal::Undefined, v8::internal::JSReceiver> >) [with Char = unsigned char]’../deps/v8/src/json/json-stringifier.cc:3141:38: required from ‘v8::internal::FastJsonStringifierResult v8::internal::FastJsonStringifier<Char>::SerializeObject(v8::internal::Tagged<v8::internal::Union<v8::internal::Smi, v8::internal::HeapNumber, v8::internal::BigInt, v8::internal::String, v8::internal::Symbol, v8::internal::Boolean, v8::internal::Null, v8::internal::Undefined, v8::internal::JSReceiver> >, const v8::internal::DisallowGarbageCollection&) [with Char = unsigned char; v8::internal::DisallowGarbageCollection = v8::internal::PerThreadAssertScopeEmpty<false, v8::internal::SAFEPOINTS_ASSERT, v8::internal::HEAP_ALLOCATION_ASSERT>]’../deps/v8/src/json/json-stringifier.cc:3480:43: required from here../deps/v8/third_party/highway/src/hwy/ops/shared-inl.h:368:27: error: static assertion failed: Too many lanes 368 | static_assert(kNumLanes <= HWY_LANES(T), "Too many lanes");
需要打上如下补丁:
--- a/deps/v8/src/json/json-stringifier.cc+++ b/deps/v8/src/json/json-stringifier.cc@@ -3285,9 +3285,15 @@ bool FastJsonStringifier<Char>::AppendString( const SrcChar* chars, size_t length, const DisallowGarbageCollection& no_gc) {- constexpr int kUseSimdLengthThreshold = 32;- if (length >= kUseSimdLengthThreshold) {- return AppendStringSIMD(chars, length, no_gc);+ // The SIMD path uses FixedTag<SrcChar, 16>, which requires at least 16 lanes+ // and does not compile under HWY_SCALAR (where HWY_LANES(T) == 1). Skip it on+ // the scalar target and fall back to the SWAR path, which is faster there+ // anyway (it processes 4 bytes per iteration vs. 1 lane for scalar SIMD).+ if constexpr (HWY_TARGET != HWY_SCALAR) {+ constexpr int kUseSimdLengthThreshold = 32;+ if (length >= kUseSimdLengthThreshold) {+ return AppendStringSIMD(chars, length, no_gc);+ } } return AppendStringSWAR(chars, length, 0, 0, no_gc); }
五、配置环境变量并验证
将 Node.js 可执行路径加入系统 PATH
echo 'export PATH=/usr/local/node-v24/bin:$PATH' >> ~/.bashrcsource ~/.bashrc
验证安装结果:

六、npm 基础优化配置
1. 配置国内镜像源,大幅提升包下载速度:
npm config set registry https://registry.npmmirror.com2. 配置用户级全局目录,避免 root 权限问题:
mkdir -p ~/.npm-globalnpm config set prefix '~/.npm-global'echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrcsource ~/.bashrc
至此,loong64 架构的 nodejs v24 版本就构建成功了,这扫清了在龙芯主机上运行 AI 工具的一个拦路虎。但升级了 node,是不是能够像在别的平台上那样使用 npm -i <package> 就可以安装了呢?答案是,没有那么简单,因为即使是 nodejs 应用,不针对 loong64 架构构建包,一样是无法安装的。所以接下来还需要从源码编译 OpenCode。这个留在下一篇文章再展开,敬请关注!
夜雨聆风