CentOS源码编译
在CentOS上进行源码编译,尤其是像GCC这样的编译器,需要一定的准备工作和步骤,下面将详细介绍如何在CentOS 7.6环境下从源码编译安装GCC 10.3.0。
环境准备
1、系统与软件:
操作系统:CentOS 7.6.1810
目标软件:GCC 10.3.0
依赖软件:gmp,mpfr,libmpc
2、安装依赖包:
安装EPEL源:yum install y epelrelease
安装基础工具:yum install y vim wget gcc gccc++ make autoconf automake zip bzip2
安装基础编译软件:yum install y gccgnat libgcc libgcc.i686 glibcdevel bison flex m4 texinfo buildessential
3、下载并解压源码:
```bash
wget P '/usr/local/src' https://ftp.gnu.org/gnu/gcc/gcc10.3.0/gcc10.3.0.tar.gz
&& cd /usr/local/src
&& tar zxvf gcc10.3.0.tar.gz C '/usr/local/src'
&& cd gcc10.3.0
```
4、配置环境变量:
```bash
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64' >> /etc/profile
source /etc/profile
```
5、添加动态链接库:
编辑/etc/ld.so.conf
文件,添加以下内容:
```text
include ld.so.conf.d/*.conf
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
```
6、重新搜索库文件并生成缓存:
```bash
ldconfig v
```
7、下载并安装依赖包:
```bash
./contrib/download_prerequisites
```
8、编译并安装依赖包:
进入每个依赖包的目录,执行以下命令:
```bash
cd /usr/local/src/gcc10.3.0/gmp6.1.0
./configure prefix=/usr/local/gmp6.1.0
make && make install
```
对mpfr、mpc和isl重复上述过程。
9、编译安装GCC:
```bash
cd /usr/local/src/gcc10.3.0
mkdir build && cd build
../configure enaBLethreads=posix enablelonglong enablelanguages=c,c++ disablechecking disablemultilib
make j3
make install
```
10、设置默认版本:
```bash
mv /usr/bin/gcc /usr/bin/gcc485mv
ln s /usr/local/gcc10.3.0/bin/gcc /usr/bin/gcc
```
11、验证安装:
```bash
gcc version
```
FAQs
问题1:为什么需要从源码编译GCC?
答:从源码编译GCC主要有以下几个原因:
1、获取最新特性:默认的Yum源中的GCC版本较旧(如CentOS 7的默认GCC版本是4.8.5),无法使用最新的语言标准和特性,通过源码编译可以安装最新版本的GCC,从而支持C++17等新特性。
2、定制优化:源码编译允许用户自定义配置选项,根据具体需求进行优化,比如启用或禁用某些功能模块,调整线程模型等。
3、依赖控制:在某些情况下,系统自带的GCC版本可能与其他软件包存在不兼容的问题,通过源码编译可以确保GCC与系统的其他部分更好地协同工作。
问题2:编译过程中如何解决依赖问题?
答:解决依赖问题的方法包括:
1、预先安装依赖:在开始编译GCC之前,确保所有必需的依赖库已经安装,可以使用Yum或其他包管理工具来安装这些依赖,对于GCC编译所需的gmp、mpfr、libmpc等库,可以通过Yum安装相应的开发包。
2、使用contrib脚本:GCC源码中包含了一个contrib脚本,可以自动下载并安装所需的依赖,运行./contrib/download_prerequisites
即可完成依赖的下载和安装。
3、手动指定路径:在配置GCC时,使用with
参数手动指定依赖库的路径。withgmp=/path/to/gmp
可以确保GCC在编译过程中找到正确的依赖库。
4、检查日志和文档:如果遇到缺少依赖的错误,可以查看编译输出日志,了解具体缺少哪个库或头文件,根据错误信息,手动安装缺失的依赖或者调整配置选项。
通过以上方法,可以有效地解决编译过程中遇到的依赖问题,确保GCC能够成功编译和安装。