在深度学习的使用过程中经常会碰到编译这个问题,对于c语言编译来说GCC的版本是比较重要的,如果你发现你的linux计算机的gcc版本比较低:
-
首先挑选一个合适的版本进行安装,进行这一步操作。链接1、链接2
2020.4.27更新 需要提到的是:一般如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-7(devtoolset-7目前gcc版本为7.3),因为devtoolset-6及之前的版本都已经结束支持,只能通过其他方法安装(链接1中的方法),但是可能会有其他错误。
-
启用新版本的GCC。注意!!
scl enable devtoolset-x bash
这个命令只是在这个Shell中启用,你如果想要一只启用怎么办?修改用户的环境变量文件:
vim ~/.bashrc
加入:
source /opt/rh/devtoolset-x/enable
其中x是你的具体版本。
如果你是root用户,修改的是系统环境变量:vim /etc/bashrc
-
2020.4.29更新:在升级新版本后,在使用mmdetection的时候发现出现了一个错误(在升级到7.3版本的时候出现了,升级到4.9版本没出现)
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
利用下面代码可以看到动态库里面包含的GLIBCXX版本
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 输出: GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_DEBUG_MESSAGE_LENGTH
解决的大致思路主要有两个,链接1是通过yum来寻找到提供动态库的安装包,然后安装,但是我尝试了这个方法,发现它还是下载老版本的libstdc++.so.6,所以尝试了第二个方法链接2,感觉这个思路很清晰,先找找/lib64下面有没有动态库,有的话直接做软连接,没有的话在系统里找找有没有匹配的版本,利用
sudo find / -name libstdc++.so.6* (斜杠代表的是路径,这是在全路径下搜索了)
我找到了自己路径下有更高版本的动态库:
/home/skye@iaclab.cse/Software/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6.0.21
于是再执行文件删除、复制、建立新的软连接这样的操作:
(base) [skye@iaclab.cse@gpu-n1-iaclab lib64] sudo cp /home/skye@iaclab.cse/Software/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6.0.21 /lib64/libstdc++.so.6.0.21 (base) [skye@iaclab.cse@gpu-n1-iaclab lib64] sudo rm /lib64/libstdc++.so.6 (base) [skye@iaclab.cse@gpu-n1-iaclab lib64] sudo ln -s /lib64/libstdc++.so.6.0.21 /lib64/libstdc++.so.6
实际上可以发现系统里还有其他很多地方有这个动态库的,我找到的就有这么多:
/home/skye@iaclab.cse/Software/anaconda3/pkgs/libstdcxx-ng-9.1.0-hdf63c60_0/lib/libstdc++.so.6 /home/skye@iaclab.cse/Software/anaconda3/pkgs/libstdcxx-ng-9.1.0-hdf63c60_0/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /home/skye@iaclab.cse/Software/anaconda3/pkgs/libgcc-5.2.0-0/lib/libstdc++.so.6 /home/skye@iaclab.cse/Software/anaconda3/lib/libstdc++.so.6 /home/skye@iaclab.cse/Software/anaconda3/x86_64-conda_cos6-linux-gnu/sysroot/lib/libstdc++.so.6 /home/skye@iaclab.cse/Software/anaconda3/envs/skye/lib/libstdc++.so.6