依旧是那个老生常谈的问题,Cent OS上的软件包大都很老,比如常用的Gcc,在最新的Cent OS 7.4上,gcc的版本才到4.8.5,虽说一味追求新版并无大用,但是有些特性老版本不支持啊,很坑的有木有。
下面记录一下安装过程。
描述
系统为Cent OS7.4,全新安装,更新全部软件至最新版。
安装准备
1 | yum update -y |
安装 glibc-devel.i686 是为了安装32位的头文件和库,否则在配置的时候就会出现下面的错误
1 | configure: error: I suspect your system does not have 32-bit developement libraries (libc and headers). If you have them, rerun configure with --enable-multilib. If you do not have them, and want to build a 64-bit-only compiler, rerun configure with --disable-multilib. |
网络上清一色的叫你加入参数--disable-multilib
,然而,这样的话就少了32位的支持了。
动手
1 | wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz |
编译过程长达数个小时,具体要多长时间得看RP了,可以用tmux把它放在后台。
需要配置的地方非常少,安装过程也没什么特殊的,但是以前安装gcc的时候随便报个错就一脸懵逼,需要注意的是在./contrib/download_prerequisites
之后,会有执行成功的提示,log如下
1 | 2018-04-16 16:37:22 URL: ftp://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840] -> "./gmp-6.1.0.tar.bz2" [1] |
这个步骤是有可能因为网络原因出问题的,这个步骤可以把安装gcc需要的四个依赖包弄好,网络上的某些教程是让你手动安装依赖,比如这个https://www.cnblogs.com/freeweb/p/5990860.html,操作越多越容易出错。
另外,配置同样是需要考虑的地方,大多数时候直接执行./configure
就过去了,我用了下面的配置参数
1 | ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux |
选择这个参数并没有什么非常实在的原因,里面很多参数我并不清楚是干嘛的,使用这个参数纯粹是因为Cent OS用yum安装的gcc的配置参数是这个。
安装gdb
在某些情况下,升级了gcc是需要同步升级gdb的,虽然不清楚是否有具体的版本对应关系,但是傻fufu的安装最新版就是了
1 | wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gdb/gdb-8.1.tar.gz |
碎碎念
有可能在执行make install
的时候报错(内心PS,都已经编译好了,你给我在安装的时候报错(ノ`Д)ノ)报错信息如下:
1 | WARNING: 'makeinfo' is missing on your system. |
需要yum install texinfo
,然后再执行make install
。
至于原本安装好的gcc的话,应该是没了吧,我是找不到它了。
安装软件的推荐性是这样的官方源>知名第三方源>手动编译>不知名第三方源
,很多时候,手动编译需要自己安装依赖,很多时候,自己安装依赖还会需要安装依赖的依赖,某些极端情况下,还会遇到依赖循环,令人十分的窒息。
自行编译安装并不是很推荐的操作,并且很多时候新版并不一定就更好,Cent OS一直用着老版本的软件并不是没有道理的。
建立builddir
的目的,只是为了让编译产生的文件集中在一个地方,免得主目录一大堆文件看起来不方便。
Ubuntu/Debia的软件版本一般都比较新,不值得花大量时间手动编译。