/usr/bin/g++*查看结果如下
/usr/bin/gcc-->gcc-5, /usr/bin/gcc-5,
/usr/bin/gcc-ar-5,
/usr/bin/gcc-ar-->gcc-ar-5,
/usr/bin/gcc-nm-->gcc-nm-5
/usr/bin/gcc-ranlib-->gcc-ranlib-5, /usr/bin/gcc-ranlib-5.
由于CUDA8.0中要求gcc版本为gcc5.3.1虽然不知道不更改会出现什么情况,但为了保险起见,还是更改吧,出了问题太不容易处理了。
更改过程:
下载和解压压缩包,找不到gcc5.3.1用的gcc5.3.0
wget
/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar/gz
tar -zxvf gcc-5.3.0.tar.gz
一、安装依赖库与工具
1。工具安装,需要的工具支持c++98的编译器(g++),make,
perl,解压工具(tar,gzip等),Binutiles
只要确认本机安装有g++, gcc本步可跳过,否则
sudo apt-get install build-essential (此步libc也一并安装了)
2。依赖库,若只安装不修改需要5个依赖库(两类)
一类(gmp,mpc,mpfr),二类(isl,cloog)
操作:(a)查看是否安装了某个库
locate
lib***(库名)若找到lib***.so说明已经安装
(b) 对于gmp,mpc,mpfr在gcc的解压目录下运行
sudo ./contrib/download_prerequisites
若下载慢,可以更改脚本中下载地址到其他的gnu镜像
(c)对于isl,cloog,可以自己编译,也可以从源上下载
sudo apt-get install libisl-dev libcloog-isl4
libcloog-isl-dev具体什么结尾可以双击Tab查看
4。安装其他的库
若希望在64位的系统下能编译32位的程序,需重新安装
sudo apt-get install gcc-multilib g++-multilib
二、配置
1、建立编译目录,用于存放编译时产生的.o文件的目录
mkdir build, cd build
2、配置
在刚建立的临时目录里调用根目录下的configure,并输入参数,各参数的含义如下
--prefix 用于配置make
install后将产生的可执行文件,库文件的根目录,若--prefix=/usr,则gcc,g++存放于/usr/bin中,lib存放于/usr/lib中默认--prefix=/usr/local
若有多个gcc,通过update-alternative来配置默认使用哪一个
--program-prefix--program-suffix 给编译出来的gcc加上前缀或后缀,如--program-prefix=my,--program-suffix=-4.8.1,则编译出来的gcc名字为"my-gcc-4.8.1"
--disable-multilib
使编译出来的gcc成为本地编译器,即生产的代码只能保证能在本机默认运行,64位系统默认关闭,所以需要先安装
gcc-multilib
--enable-language 编译出的gcc支持的语音,一般 C,C++
--with-gmp,
--with-mpfr,--with-mpc,--with-isl,--with-cloog,--with-gmp-include,--with-gmp-lib若上面的库安装了且不在标准的搜索路径,需要手动制定相应路径
--with-XXX=YYY--with-XXX-include=YYY/include
和--with-XXX-lib=YYY/lib
如64位系统,当前gcc安装于/usr/bin
../configure --prefix=/usr/local --disable-multilib
--enable-language=C,C++其结果时安装了gcc作为本地编译器,与系统的原gcc共存,支持 C和C++
或
../configure --prefix=/usr --enable-languages=C,C++
生成32位可执行文件覆盖原来的gcc,支持C,C++
3、检查
打开Makefile
文件同事生成的config.log文件,搜索“error”正常情况下,只会搜到一些条件信息里的error如werror和获取信息时,使用"gcc
-V"但gcc不支持-V之类的错误。
若出现include某个文件不存在需注意。
三、编译
sudo make -j等待很长时间
没有问题后,可以make check一下
##################################
此时容易出现错误
1. /bin/bash: autogen:未找到命令
解决方法: sudo apt-get install autogen
2.make[2]: **[check] error 127
解决方法: sudo make check
但是仍然会出现问题,好像也不影响后面的过程
##################################
最后没有问题,执行
sudo make
install[注:gcc不支持make uninstall 覆盖需谨慎,root权限]
四、后继工作
还不是特别懂
有两个版本的gcc,可以通过输入完整的路径来调用不建议
1、sudo rm /usr/bin/gcc(删除GCC,它只是个到gcc-4.3.2的软链接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc(建立GCC到gcc-4.1的软链接)
这个时候可以用gcc
-v查看当前使用的gcc版本
编译完成后可以运行以下命令修改回来
sudo rm /usr/bin/gcc
sudo ln -s /usr/bin/gcc-4.3 /usr/bin/gcc
2、建议通过update-alternatives 来让系统知道gcc调用哪一个
如设置GCC4.1和GCC4.4的可选项,在终端输入以下命令
sudo update-alternatives --install /usr/bin/g++ g++
/usr/bin/g++-4.4 40
sudo update-alternatives --install /usr/bin/g++ g++
/usr/bin/g++-4.1 40
现在设置GCC的默认版本,输入下面命令:
sudo update-alternatives --config g++
得到的结果:
There are 2choices for the alternative gcc (providing
/usr/bin/g++)。
Selection Path Priority Status
*0 /usr/bin/g++-4.4 40 auto mode
1 /usr/bin/g++-4.1 30 manual mode
2 /usr/bin/g++-4.4 40 manual mode
然后输入“1”,再查看一下g++的版本,已经变成4.1的了。
五、总结
sudo apt-get install gcc g++ make libc6-dev sudo apt-get
build-essential根据自己系统的具体情况选择安装
sudo apt-get install libisl-dev
libcloog-isl4libcloog-isl-dev
若希望64位系统能编译32位代码需要安装下面的
sudo apt-get install gcc-multilib g++-multilib
下载依赖库(gmp,mpc,mpfr)
sudo ./contrib/download_prerequisites有时下载很慢,可以从网上搜索安装包,下载,按照脚本中的代码来安装
sudo mkdir build
cd build
../configure --prefix=/usr/ --enable-languages=C,C++
生成32位可执行文件覆盖原来的gcc,支持C,C++
sudo make -j4
sudo make install
经验:
在下载安装配置依赖库后最好设置共享库
方法:sudo updatedb
locate
libgmp.so等,看其所在路径,若不在/lib或/usr/lib下,修改/etc/ld.so.conf文件将上述路径加入此文件
然后运行:sudo ldconfig
库路径的设置,修改/etc/profile或~/.bashrc文件
将gcc的安装路径/usr/bin加入搜索路径,将/usr/lib加入库路径,当然,具体路径与安装时的选项有关