今天在折腾CUDA,使用的是CUDA 7.5,但最高支持的GCC只支持到4.9,但我系统里装的已经是6.1了,需要重装把GCC安装过。由于repo里并没有旧版本的gcc,所以需要去它的老家下载一个旧版本的下来编译。
这里有两种安装的办法
- 直接先remove掉本地的gcc,然后安装旧版本的
- 直接编译旧版本的到别的目录,然后通过软链接来指向
由于remove掉本地会影响到其他,所以我使用第二种办法。
我下载的是4.8.5版本的,下下来后解压备用。
GCC编译安装需要依赖三个库,GMP,MPFR,MPC,它们的依赖关系为MPFR -> GMP , MPF -> {MPFR,GMP},需要旧版的话也可以到这里下载。
GMP
我这里使用的GMP是最新版本的6.1.0,先执行配置1
./configure --prefix=/usr/local/gmp-6.1.0
选择将gmp安装到/usr/local/gmp-6.1.0。
输出结果1
2
3
4
5
6
7
8
9configure: summary of build options:
Version: GNU MP 6.1.0
Host type: haswell-pc-linux-gnu
ABI: 64
Install prefix: /usr/local/gmp-6.1.0
Compiler: gcc
Static libraries: yes
Shared libraries: yes
后就可以进行编译了.
1 | make |
完成后显示1
2Libraries have been installed in:
/usr/local/gmp-6.1.0/lib
就可以了
MPFR
MPFT我使用最新的3.1.4版本,安装的方法与GMP类似,解压后执行配置,由于mpfr需要依赖于GMP,所以配置需要带上gmp的路径.
1 | ./configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0 |
完成后显示1
2Libraries have been installed in:
/usr/local/mpfr-3.1.4/lib
即可。
MPC
MPC我使用最新的1.0.3版本,方法与上边类似,只讲配置的方法1
./configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4/
然后安装即可。
同样,完成显示1
2Libraries have been installed in:
/usr/local/mpfr-3.1.4/lib
=.= 最后装到了mpfr里去了。
gcc
装好上述三个东西后,编译gcc就差不多了,执行gcc的编译配置,指定好mpfr,gmp的路径,指定编译的语言为c/c++,如果没时间等的话就把checking关掉1
2
3
4./configure --prefix=/usr/local/gcc-4.8.5 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4/
make
make check
sudo make install
就行了。make过程可以使用多线程,试了好像也没问题。这个过程有可能会比较久,磁盘空间最好备多点。
完成后,将/usr/bin下的gcc与g++替换成/usr/bin/gcc-4.8.5/bin/下的对应文件即可。
1 | ln -s /usr/bin/gcc-4.8.5/bin/gcc /usr/bin/gcc |
问题
- error: ‘const char libc_name_p(const char, unsigned int)’ redeclared inline with ‘gnu_inline’ attribute