解决conda环境libstdc++版本过低问题

解决conda环境libstdc++版本过低问题

环境:

ubantu版本22.04。conda版本conda 23.9.0

问题:

编译时提示undefined reference to … @GLIBCXX_3.4.30.链接时找不到该版本的库。

个人解决过程:

  • 检查系统libstdc++的版本,版本已经是最新(libstdc++.6.0.30)
  • 安装相应的libstdc+±dev(问copilot 它提示我要装 我目前还不知道是否必要)
  • 重新检查警告,发现了这条:runtime library [libQt5OpenGL.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
    /home/zhk/anaconda3/lib。这意味着链接时可能采用anaconda中较低版本的库,而非使用系统的。
  • 查看anaconda中libstdc++的版本 发现确实版本比较老(libstdc++.so.6.0.29)
  • 尝试修改环境变量,想链接到系统的最新版本的库。但是Cmake还是优先找conda环境中的库。
  • 换思路,直接更新conda中的库。先尝试利用conda更新:conda install -c anaconda libstdcxx-ng。发现conda安装的最新版本还是6.0.29。
  • 了解libstdc++.so的原理(软链接),结合系统中已经存在libstdc++.6.0.30,决定手动修改,更新conda中libstdc++。
  • 手动修改后 编译成功!!

手动修改conda环境中libstdc++版本

  1. 把系统中高版本的libstdc++.so.6.0.30复制到conda相应环境的lib中(记得修改前备份,防止改错了)
  2. 删除原有软链接
rm libstdc++.so libstdc++.so.6
  1. 创建新的软链接
sudo ln -s libstdc++.so.6.0.30 libstdc++.so.6
sudo ln -s libstdc++.so.6.0.30 libstdc++.so

4.检查新的软链接是否创建成功

ls -l libstdc++.so
ls -l libstdc++.so.6

输出大概像这样:

lrwxrwxrwx 1 root root 19  2月  3 13:51 libstdc++.so -> libstdc++.so.6.0.30

对自己的启示:

  1. 看编译器提示要全面地看,不要忽略警告。
  2. 一条路走不通可以暂时让脑子放松一下 跳出来想想还有没有别的办法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值