红联Linux门户
Linux帮助

Ubuntu GCC安装、版本切换

发布时间:2017-03-20 09:51:47来源:linux网站作者:lyy14011305
作者写这篇文章的背景是在Ubuntu16.04 LTS上跑CNN代码的时候遇到的问题,作者解决该问题花费了很长的时间,即使StackFlow、搜索上也没有给出很好的答案,一开始作者以为是代码的错误,所以就花费了很长时间来查看代码,但是并没有发现错误,但是却发现了一个大的逻辑错误(此处意外惊喜、因为对最后的结果有帮助),于是作者使用可以在Windows环境下可以运行的工程放到Ubuntu系统上跑,还是不能跑,所以作者开始怀疑是否是Ananconda版本、Theano架构、GPU加速等问题,但是一一试过之后还是报同一个错误,最后一句很长,但是可以看出是编译时产生的错。于是作者这是才怀疑是否是ubuntu 16.04上GCC版本过高的问题(GCC=5.4.0),而在Windows 下GCC版本是4.7.0。同时作者遇到的错误如下:
 
File "/home/g/anaconda/lib/python2.7/site-packages/theano/sandbox/cuda/__init__.py", line 237, in make_thunk
compute_map, no_recycling)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/op.py", line 606, in make_thunk
output_storage=node_output_storage)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/cc.py", line 948, in make_thunk
keep_lock=keep_lock)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/cc.py", line 891, in __compile__
keep_lock=keep_lock)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/cc.py", line 1322, in cthunk_factory
key=key, fn=self.compile_cmodule_by_step, keep_lock=keep_lock)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/cmodule.py", line 996, in module_from_key
module = next(compile_steps)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/cc.py", line 1237, in compile_cmodule_by_step
preargs=preargs)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/sandbox/cuda/nvcc_compiler.py", line 444, in compile_str
return dlimport(lib_filename)
File "/home/g/anaconda/lib/python2.7/site-packages/theano/gof/cmodule.py", line 284, in dlimport
rval = __import__(module_name, {}, {}, [module_name])
ImportError: ('The following error happened while compiling the node', GpuCAReduce{add}{1}(<CudaNdarrayType(float32, vector)>), '\n', '/home/g/.theano/compiledir_Linux-3.11.0-26-generic-x86_64-with-debian-wheezy-sid-x86_64-2.7.8-64/tmpWYqQw5/7173b40d34b57da0645a57198c96dbcc.so: undefined symbol: __fatbinwrap_66_tmpxft_00004bf1_00000000_12_cuda_device_runtime_compute
_50_cpp1_ii_5f6993ef', '[GpuCAReduce{add}{1}(<CudaNdarrayType(float32, vector)>)]')
 
所以作者此时才想办法如何去解决如何替换当前的GCC版本:
(1)、使用 gcc -v 查看当前的gcc版本。
(2)、添加源 
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
(注:此源有些GCC丢失了,比如4.7, 作者安装的4.6(4.8、4.9、5.0等应该也可以),但4.7开始支持C++11模式的编译等,所以相当于两个级别,但是只能退而求其次)
(3)、执行更新
sudo  apt-get update
(4)、安装新版本的GCC
sudo apt-get  install gcc-4.6(或4.8、4.9等)
sudo apt-get  install g++-4.6(或4.8、4.9等)
(5)、删除原来的GCC、G++连接
sudo rm gcc
sudo rm g++
(6)、使连接指向新版本的gcc、g++
sudo ln -s gcc-4.6 gcc
sudo ln -s g++-4.7 g++
(7)、使用gcc -v、g++ -v查看当前的gcc、g++版本
如果替换回来可以使用同样的方式操作使其指向想要的版本。
(8)、which gcc 显示当前gcc版本所在的目录
(9)、gcc 一般在/usr/bin/gcc下。所以使用 cd /usr/bin/ 进入该文件目录;使用ls -al | grep gcc查看当前系统中所有的gcc。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/29313.html