Ubuntu 升级gcc带来的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lvcaoyouyou/article/details/86563020

gcc是什么?
现在你在编译代码时调用的gcc,已经不是当初那个c语言编译器了。更确切的说他是一个驱动程序,根据代码的后缀名来判断调用c编译器还是c++编译器 (g++)。比如你的代码后缀是.c,他会调用c编译器还有linker去链接c的library。如果你的代码后缀是.cpp, 他会调用g++编译器,当然library call也是c++版本的。

gcc -v #查看gcc的版本
g++ -v #查看g++的版本

1)可能情况1
(1)现象描述:(1)循环输入登录密码(开机系统启动,但是输入正确密码,屏幕变黑,马上又是输入密码界面)(2)开机可以进入系统,但是桌面上没有任何东西

(2)问题定位:以解决现象1为主
本系统版本ubuntu16.04 64bit

(3)问题解决步骤:
在登录界面按ctrl+alt+F1进入到命令模式,查看启动失败原因:

sudo /home/(用户名替代)/.xsession-errors

~~报错信息是第一行
/usr/bin/xbrlapi: libstdc++.so.6:vrsion `CXXABI_1.3.8’ not found (required by /usr/lib/x86_64-linux-gnu/libicuuc.so.55)
这段话的意思是libstdc++.so.6缺少CXXABI_1.3.8一个东西。因为在上次关机之前升级了gcc到4.9。stackoverflow上有原因解释:GCC 4.9 introduces a newer C++ ABI version than your system libstdc++ has, so you need to tell the loader to use this newer version of the library by adding that path to LD_LIBRARY_PATH 知道出错原因后,就好办了,在终端输入

$locate libstdc++.so.6

在输出列表中找到系统自带的libstdc++.so.6文件所在路径,用vi打开/etc/profile文件,

sudo vim /etc/profile

将此路径添加到LD_LIBRARY_PATH环境变量中。(注:如果Ubuntu装在了虚拟机上,是个镜像文件,所以即使root进去了还是没有写权限。输入$mount -o rw,remount /即可。)

export PATH=/usr/lib/X86_64-linux-gnu:$PATH
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu

输入

$source /etc/profile

刷新。输入

$cat /etc/profile

确认。Ctrl+Alt+F7 切换回图形模式,登陆成功。(或者在命令行中输入:shutdown -r now ,马上重启计算机!)

参考:https://www.linuxidc.com/Linux/2016-08/134257.htm

2)可能情况2
(1)现象描述:调用Darknet下的.py脚本,报错:OSError: /anaconda3/bin/…/lib/libstdc++.so.6: version `GLIBCXX_3.4.20’ not found (required by /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4)
(2)问题解决步骤

strings /home/(此处用自己的用户名替代)/anaconda3/bin/…/lib/libstdc++.so.6 | grep GLIBCXX

发现确实没有,

find / -iname libstdc++.so.6.0.2*

找到最新版本在下面的文件家中存在,

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 | grep GLIBCXX

确实有,下一步拷到相关目录下

cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21 /home/zdyd/anaconda2/bin/…/lib/

在到之前的目录

cd /home/zdyd/anaconda2/bin/…/lib/

删除原来的:

rm -rf libstdc++.so.6

建立软链接:

ln -s libstdc++.so.6.0.21 libstdc++.so.6

再次查看已存在

strings /home/zdyd/anaconda2/bin/…/lib/libstdc++.so.6 | grep GLIBCXX

注意:一定要看好是自己的那个目录的相关版本不存在,不要瞎改,

错误:
ImportError: /home/zdyd/anaconda2/bin/…/lib/libgomp.so.1: version `GOMP_4.0’ not found (required by /usr/lib/x86_64-linux-gnu/libsoxr.so.0)
利用同样的方法即可解决。

参考:

  1. ubuntu常见问题持续更新
  2. ubuntu16.04+cuda8.0+caffe安装

猜你喜欢

转载自blog.csdn.net/lvcaoyouyou/article/details/86563020