Linux系统下多版本gcc使用问题记录
一、背景
系统:CentOS 7.6
gcc版本:4.8.5
需求gcc版本:8.3.0
编译开源社区中5.10版本内核代码,制作相应的kernel、kernel-devel、kernel-debug等rpm包,而5.10内核对gcc编译器的版本要求为最低4.9,因此CentOS系统中自带的4.8.5版本的gcc无法满足编译5.10内核的要求,因此需要升级gcc版本,采取在编译内核态时使用升级的高版本gcc,而默认的用户态编译依然使用CentOS中默认的4.8.5;
二、gcc编译安装
源码下载地址:http://ftp.gnu.org/gnu/gcc/
选择一个大于4.9版本的gcc源码下载即可;
关于基于gcc源码进行编译安装升级过程,请参考网站:
https://www.cnblogs.com/dinghailong128/p/12153330.html
注意的是在生成Makefile文件时,增加编译安装路径,–prefix=/usr/local/gcc-8.3.0
./configure --prefix=/usr/local/gcc-8.3.0 -enable-checking=release -enable-languages=c,c++ -disable-multilib --enable-linker-build-id
那么后续gcc的安装产生的所有文件都会在你指定的目录下,(make & make install的过程可能会耗时比较久)安装后该路径下的内容如下图所示:
而bin目录下的即为可执行文件:
3、两套gcc版本共存方案
CentOS默认的gcc在/usr/bin/目录下,执行gcc -v时即可查看到的版本为gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ;而执行/usr/local/gcc-8.3.0/bin目录下的gcc -v即为升级后的gcc编译器。
后续在编译时只需要在对应的Makefile文件中指定对应版本的编译器即可;例如:
原始的Makefile中指定的编译器为默认的gcc:
HOSTCC = gcc
HOSTCXX = g++
更改为如下的形式在编译时即使用8.3.0版本的gcc进行编译了。
HOSTCC = /usr/local/gcc-8.3.0/bin/gcc
HOSTCXX = /usr/local/gcc-8.3.0/bin/g++
同样还需更改的一个地方为:
CC = $(CROSS_COMPILE)gcc
====》
CC = $(CROSS_COMPILE)/usr/local/gcc-8.3.0/bin/gcc
还有一种形式是设置软连接,将/usr/local/gcc-8.3.0/bin/下的可执行文件软连接到/usr/bin下,
例如:
ln -s /usr/local/gcc-8.3.0/bin/gcc /usr/bin/gcc-8.3.0
ln -s /usr/local/gcc-8.3.0/bin/g++ /usr/bin/g++-8.3.0
这样在系统中执行gcc-8.3.0 -v即可;
而Makefile中的更改如下:
HOSTCC = gcc-8.3.0
HOSTCXX = g++-8.3.0
CC = $(CROSS_COMPILE)gcc-8.3.0