手动编译GCC 13.0运行触发Segmentation fault问题求助
解决GCC 13编译程序运行时链接旧版libstdc++的问题
- 定位GCC 13的库路径
找到手动编译的GCC 13配套libstdc++.so所在目录,比如若在$HOME/gcc-13.0.0下编译安装,路径大概率是$HOME/gcc-13.0.0/lib64。用以下命令快速查找:
find $HOME -name "libstdc++.so.6" | grep gcc-13
- 编译时显式指定链接库路径(推荐长期方案)
别仅依赖alias调用GCC 13,编译时要让链接器明确使用新版库,最靠谱的方法是加-Wl,-rpath参数,把GCC13的库路径嵌进程序:
g++-13 -g -O0 your_program.cpp -o your_program -Wl,-rpath=$HOME/gcc-13.0.0/lib64
或者直接调用GCC13编译器的完整路径,它会自动关联自己的库文件:
$HOME/gcc-13.0.0/bin/g++ -g -O0 your_program.cpp -o your_program
- 临时测试用:设置LD_LIBRARY_PATH
如果只是临时验证程序能否正常运行,可在运行前临时修改环境变量,让系统优先加载新版库:
export LD_LIBRARY_PATH=$HOME/gcc-13.0.0/lib64:$LD_LIBRARY_PATH ./your_program
注意这个设置仅在当前终端会话有效,关闭终端后失效,不适合长期使用。
- 验证链接结果
编译完成后,用ldd检查程序依赖的库是否正确:
ldd your_program | grep libstdc++
输出若指向你GCC13目录下的libstdc++.so,说明链接成功;要是仍显示系统默认的/lib/x86_64-linux-gnu/libstdc++.so.6,回头检查编译参数是否正确。
内容的提问来源于stack exchange,提问作者Vivek
相关产品推荐
相关产品推荐

