WSL Ubuntu22.04中GCC13.2.0编译程序运行时缺失GLIBCXX_3.4.32怎么办?
解决GCC 13.2.0编译程序后GLIBCXX_3.4.32找不到的问题
问题原因
你编译安装的GCC 13.2.0自带了新版libstdc++.so.6,但系统运行时默认优先加载/lib/x86_64-linux-gnu下的旧版本库,导致找不到所需的GLIBCXX_3.4.32版本。
解决方法
1. 定位新版libstdc++的位置
先确认编译好的新版库所在路径,执行以下命令:
find /usr/local -name "libstdc++.so.6"
通常路径会是/usr/local/lib64或/usr/local/lib/x86_64-pc-linux-gnu/13.2.0/,记下来这个路径。
2. 临时生效方案(仅当前终端)
把新版库的路径加入LD_LIBRARY_PATH环境变量,替换下面的<你的库路径>为实际找到的路径:
export LD_LIBRARY_PATH=<你的库路径>:$LD_LIBRARY_PATH
之后再运行你的./hello程序即可。
3. 永久生效方案(所有终端)
方式一:修改shell配置文件
编辑你的shell配置文件(比如~/.bashrc,如果用zsh则是~/.zshrc),在末尾添加:
export LD_LIBRARY_PATH=<你的库路径>:$LD_LIBRARY_PATH
保存后执行以下命令让配置生效:
source ~/.bashrc
方式二:更新系统库缓存
创建一个新的库配置文件:
sudo touch /etc/ld.so.conf.d/local-gcc.conf
用编辑器打开并写入你的新版库路径:
sudo nano /etc/ld.so.conf.d/local-gcc.conf
添加内容(替换为实际路径):
<你的库路径>
保存后执行以下命令更新系统库缓存:
sudo ldconfig
4. 编译时直接指定链接路径
编译程序时,通过-Wl,-rpath参数把新版库路径嵌入到程序中,这样运行时无需修改环境变量:
g++ hello.cpp -o hello -Wl,-rpath=<你的库路径>
验证新版库有效性
可以通过以下命令确认新版库包含GLIBCXX_3.4.32:
strings <你的库路径>/libstdc++.so.6 | grep GLIBCXX_3.4.32
如果输出包含该版本号,说明库编译正常。
内容的提问来源于stack exchange,提问作者user13692250
相关产品推荐
相关产品推荐

