Ubuntu GCC安装、版本切换

来源:互联网 发布:电脑软件怎么安装 编辑:程序博客网 时间:2024/06/05 16:33

作者写这篇博文的背景是在Ubuntu16.04 LTS上跑CNN代码的时候遇到的问题,作者解决该问题花费了很长的时间,即使StackFlow、google上也没有给出很好的答案,一开始作者以为是代码的错误,所以就花费了很长时间来查看代码,但是并没有发现错误,但是却发现了一个大的逻辑错误(此处意外惊喜、因为对最后的结果有帮助),于是作者使用可以在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.6 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


参考文献:

(1)、http://www.xuebuyuan.com/2181579.html

(2)、http://www.2cto.com/os/201408/323774.html

(3)、http://blog.csdn.net/dearwind153/article/details/47356577


0 0
原创粉丝点击