如何在Buildroot配置中添加Node.js所需的GLIBC版本?
问题
在Ubuntu 22.04.4 LTS系统上,用Buildroot为ARM Cortex-A7目标平台构建根文件系统,通过Target packages -> Interpreter languages and scripting ->勾选[*] nodejs集成Node.js。烧录启动目标平台后,在/usr/bin/目录下运行node时出现以下错误:
/usr/bin # ./node ./node: /lib/libm.so.6: version `GLIBC_2.38' not found (required by ./node) ./node: /lib/libm.so.6: version `GLIBC_2.29' not found (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libstdc++.so.6: no version information available (required by ./node) ./node: /lib/libc.so.6: version `GLIBC_2.33' not found (required by ./node) ./node: /lib/libc.so.6: version `GLIBC_2.34' not found (required by ./node) ./node: /lib/libc.so.6: version `GLIBC_2.32' not found (required by ./node) ./node: /lib/libc.so.6: version `GLIBC_2.38' not found (required by ./node) ./node: /lib/libc.so.6: version `GLIBC_2.32' not found (required by /usr/lib/libuv.so.1) ./node: /lib/libc.so.6: version `GLIBC_2.38' not found (required by /usr/lib/libuv.so.1) ./node: /lib/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/libuv.so.1) ./node: /lib/libc.so.6: version `GLIBC_2.34' not found (required by /usr/lib/libuv.so.1) ./node: /lib/libc.so.6: version `GLIBC_2.34' not found (required by /usr/lib/libcares.so.2) ./node: /lib/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/libcares.so.2) ./node: /lib/libc.so.6: version `GLIBC_2.36' not found (required by /usr/lib/libcares.so.2) ./node: /lib/libc.so.6: version `GLIBC_2.38' not found (required by /usr/lib/libcares.so.2) ./node: /lib/libc.so.6: version `GLIBC_2.38' not found (required by /usr/lib/libcrypto.so.3) ./node: /lib/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/libcrypto.so.3) ./node: /lib/libc.so.6: version `GLIBC_2.34' not found (required by /usr/lib/libcrypto.so.3) ./node: /lib/libc.so.6: version `GLIBC_2.33' not found (required by /usr/lib/libssl.so.3) ./node: /lib/libc.so.6: version `GLIBC_2.34' not found (required by /usr/lib/libssl.so.3)
目前不清楚如何修改Buildroot配置以满足所需的GLIBC版本,在make nconfig的Toolchain ->下仅看到一个GLIBC相关选项:Enable compatibility shims to run on older kernels,且已勾选。
解决方法
1. 切换到Buildroot内部工具链
你当前大概率用的是主机系统的交叉工具链(比如Ubuntu自带的gcc),这类工具链的GLIBC版本和目标平台不匹配才导致报错。切换到Buildroot自带的内部工具链,就能直接控制GLIBC版本:
- 打开
make nconfig,进入Toolchain -> Toolchain type,选择Buildroot toolchain - 此时会出现
C library选项,进入后选择满足Node.js依赖的GLIBC版本(比如2.38或更高,对应报错里的要求)
2. 确认Node.js版本兼容性
选择GLIBC版本后,要确保Buildroot提供的Node.js版本支持该GLIBC:
- 进入
Target packages -> Interpreter languages and scripting -> nodejs,查看可选的Node.js版本,优先选择Buildroot标记为兼容当前GLIBC版本的选项
3. 清理并重新构建
修改配置后必须清理旧构建文件,否则残留的旧库会导致问题:
make clean make
重新编译后,所有依赖(包括GLIBC、Node.js及其关联库)都会用新工具链编译,版本匹配问题就能解决。
4. 关于内核兼容性选项的说明
你勾选的Enable compatibility shims to run on older kernels仅用于让GLIBC兼容旧版本内核,和GLIBC本身的版本无关,所以这个选项不影响当前的版本匹配问题。
内容的提问来源于stack exchange,提问作者Daryl Spitzer
相关产品推荐
相关产品推荐

