未设置LD_LIBRARY_PATH时ldd为何无法找到/usr/local/lib64下的libstdc++
解决方案
核心原因是动态链接器的库搜索优先级问题:当前系统默认的/lib/aarch64-linux-gnu路径搜索顺序排在你新增的/usr/local/lib64前面,动态链接器找到第一个匹配的旧版libstdc++.so.6就会停止搜索,所以不会加载你安装的gcc11对应的新版库。按以下步骤操作即可解决:
- 调整库路径搜索优先级,二选一即可:
- 编辑
/etc/ld.so.conf文件,将/usr/local/lib64添加到文件的最开头位置 - 把你创建的
/etc/ld.so.conf.d/gcc-11.2.0.conf重命名为/etc/ld.so.conf.d/00-gcc-11.2.0.conf,Debian系系统会按文件名的字典序加载配置文件,00开头的配置优先级最高
- 编辑
- 执行
sudo ldconfig刷新动态链接库缓存 - 验证配置是否生效,运行命令:
输出的第一行如果是ldconfig -p | grep libstdc++.so.6libstdc++.so.6 (libc6,AArch64) => /usr/local/lib64/libstdc++.so.6就说明配置成功,此时直接运行你的程序无需指定LD_LIBRARY_PATH即可正常加载新版库。
内容的提问来源于stack exchange,提问作者Come Raczy
相关产品推荐
相关产品推荐

