在CentOS 7上安装GCC 10
在一台没有管理员权限的CentOS 7上,我想要安装的某个软件需要用到CMake,但是没有安装。编译CMake的时候报错不支持c++11标准。
gcc -v一看,果然,版本4.8。接下来就是编译安装最新版GCC(10.4)了。
操作系统
此次的服务器是CentOS 7。
1 | $ uname -r |
安装依赖
GCC有三个必选的依赖:mpc、mpfr、gmp。可以联网的服务器可以使用gcc自带的脚本./contrib/download_prerequisites下载解压,但是这个服务器无法联网,所以先下载到我自己的电脑上再上传。
阅读脚本可知,所需三个依赖的版本和URL分别为:
1 | http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 |
上传脚本到服务器的GCC源码目录,注释掉脚本里下载压缩包的部分(如下所示),然后运行指令./contrib/download_prerequisites --no-isl --no-verify。之后就可以编译了。
1 | # 第218行 |
编译GCC
GCC要编译三次,真是漫长的等待。
1 | cd gcc-10.4.0/ |
安装目录指定为$HOME/.gcc/10.4.0。 disable-multilib意为只编译64位系统相关文件,跳过32位系统相关的编译任务。 enable-languages指定只编译c、c++、fortran三种语言的编译器,其实gcc还可以支持这些语言:c, ada, c++, go, brig, d, fortran, objc, obj-c++, gm2。
安装GCC
1 | make install |
make install似乎还有一些编译任务要执行,可以指定多线程数加速。下面一行创建软连接是方便以后切换版本。之后需要在.bashrc里添加一些全局变量:
1 | export PATH=$HOME/.gcc/default/bin:$PATH |
CMake编译选项
当使用CMake编译软件的时候,可以使用如下代码指定编译器:
1 | cmake \ |
碎碎念
昨晚要安装一个软件,需要先安装C++的YAML库。编译安装YAML需要CMake,而CMake编译失败了,因为需要gcc支持c++11标准。但是,gcc 4.8是好多年前的编译器了,早在我刚上高中的时候这个版本还都是最火的gcc版本(当然现在很过时了)。于是安装gcc。一开始没看文档,折腾了一晚上。今早照着别人的教程安装,被依赖版本毒打,因为我安装的版本都太新了,而且据(GCC Wiki)说,如果我编译GCC的时候是动态链接这三个库的,那么之后运行GCC的时候总要动态链接这三个库,也就是需要把他们加入编译器全局变量里。
这显然是不能接受的。我只是想临时地使用这三个库,不想以后我的所有程序都要链接他们。最后,对着GCC官方Wiki,终于安装成功了。
事实证明,即使是GCC 4.8,也是可以编译GCC 10.4的!
虽然后来在服务器上发现了GCC 11.2,但是事到如今装都装了……
Fin.