Ubuntu 升级gcc带来的问题
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)
利用同样的方法即可解决。
参考: