升级GCC至13.1后编译程序成功但运行出现Segmentation Fault求助
问题解决:GCC13.1.0编译程序运行段错误
问题原因
你用GCC13.1.0编译的程序,运行时加载了系统旧版本的libstdc++.so.6(对应之前的GCC11.3.0),新编译器生成的代码与旧标准库内部结构不兼容,导致段错误。从ldd输出能看到程序依赖的是/lib/x86_64-linux-gnu/libstdc++.so.6,而非GCC13.1.0自带的配套库。
解决方法
方法1:临时指定库路径运行
先找到GCC13.1.0自带的libstdc++.so.6路径,通常在/usr/local/lib64或/usr/local/lib/x86_64-pc-linux-gnu/13.1.0/下,找不到的话用命令定位:
find /usr/local -name "libstdc++.so.6"
找到路径后,运行程序时通过环境变量指定加载该库:
LD_LIBRARY_PATH=你的GCC13库路径 ./main
方法2:永久配置库路径
- 创建GCC13库路径的配置文件:
echo "/usr/local/lib64" | sudo tee /etc/ld.so.conf.d/gcc13.conf
(如果你的库路径不是/usr/local/lib64,替换成实际路径)
2. 更新系统动态链接缓存:
sudo ldconfig
之后运行程序会自动优先加载GCC13的标准库。
方法3:编译时静态链接标准库
编译时添加-static-libstdc++参数,将GCC13的libstdc++静态嵌入程序,彻底避免依赖系统库:
g++ main.cpp -std=c++20 -o main -static-libstdc++
内容的提问来源于stack exchange,提问作者Ustinian
相关产品推荐
相关产品推荐

