Docker node:16环境缺失GLIBCXX_3.4.29的解决求助
解决lru-native2依赖GLIBCXX_3.4.29的问题
方案一:从源码编译安装高版本libstdc++
适合不想修改yarn.lock的场景,步骤如下:
- 安装编译基础依赖:
apt update && apt install -y build-essential wget - 下载包含GLIBCXX_3.4.29的gcc源码(以gcc-11.4.0为例):
wget https://ftp.gnu.org/gnu/gcc/gcc-11.4.0/gcc-11.4.0.tar.gz - 解压并进入源码目录:
tar -xzf gcc-11.4.0.tar.gz && cd gcc-11.4.0 - 自动下载gcc依赖库:
./contrib/download_prerequisites - 创建编译目录并执行编译安装:
mkdir build && cd build ../configure --prefix=/usr/local --enable-languages=c,c++ --disable-multilib make -j$(nproc) make install - 更新系统库缓存:
ldconfig - 验证版本:
输出中应该能看到strings /usr/local/lib64/libstdc++.so.6 | grep GLIBCXXGLIBCXX_3.4.29
方案二:静态编译lru-native2
通过静态链接libstdc++,避免依赖系统库版本:
- 安装node模块编译依赖:
apt install -y node-gyp build-essential - 删除现有lru-native2包:
rm -rf node_modules/lru-native2 - 设置编译时静态链接参数:
export CXXFLAGS="-static-libstdc++" - 重新安装依赖(保留yarn.lock):
yarn install --frozen-lockfile
方案三:临时挂载本地高版本libstdc++(仅测试用)
如果本地环境有兼容的libstdc++,可以挂载到容器中使用:
docker run -v /usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libstdc++.so.6 [你的容器镜像]
注意替换路径为本地实际的libstdc++位置。
内容的提问来源于stack exchange,提问作者Guilherme Morgado
相关产品推荐
相关产品推荐

