Linux 下编译安装 gcc 5.4.0

以 gcc 5.4.0 版本为例,介绍用源码来编译安装 gcc 的方法

一、安装 gcc

1、解压缩

把 gcc-5.4.0.tar.gz 拷贝到系统中的某个目录,比如 /usr/local/src,并解压到此目录:

tar zxf gcc-5.4.0.tar.gz

2、创建安装目录

gcc 的安装目录一般是 /usr/local/gcc-5.4.0,关于此目录的含义可以参考:https://blog.csdn.net/lina_acm/article/details/78224656

mkdir /usr/local/gcc-5.4.0/
mkdir /usr/local/src/gcc-5.4.0/build  # build 目录用来存放 Makefile 等文件

3、配置安装文件

通过执行 configure 来配置 gcc 安装安装到什么位置、支持什么语言等等:

cd /usr/local/src/gcc-5.4.0/build
/usr/local/src/gcc-5.4.0/configure  \
--prefix=/usr/local/gcc-5.4.0  \
--enable-threads=posix  \
--disable-multilib  \
--enable-languages=c,c++
# --prefix=/usr/local/gcc-5.4.0  指定安装路径
# --enable-languages=c,c++       支持的编程语言
# --enable-threads=posix         使用POSIX/Unix98作为线程支持库
# --disable-multilib             取消多目标库编译(在64位系统中是取消32位库编译)

更多的参数说明可以在 configure 参数中加上 -h 来显示

如果出现如下错误,说明需要安装 GMP、MPFR、MPC 这三个库,可以按照后面第二部分的说明来安装:

configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.

安装完三个依赖的库之后,重新执行 configure,不过要加上三个库的安装路径作为参数:

cd /usr/local/src/gcc-5.4.0/build
/usr/local/src/gcc-5.4.0/configure  \
--prefix=/usr/local/gcc-5.4.0  \
--enable-threads=posix  \
--disable-multilib  \
--enable-languages=c,c++  \
--with-gmp=/usr/local/gmp-6.1.0  \
--with-mpfr=/usr/local/mpfr-3.1.4  \
--with-mpc=/usr/local/mpc-1.0.3

4、安装 gcc

cd /usr/local/src/gcc-5.4.0/build
make -j4
make install

-j 参数用来设置多线程编译
make 执行的时间很长

5、切换 gcc 版本

先确认一下当前 gcc 的版本,然后改成其它名字,不然后面的步骤不生效:

/usr/bin/gcc -v
...
gcc 版本 4.9.2 20141101 (Red Hat 4.9.2-1) (GCC) 
...
mv /usr/bin/gcc /usr/bin/gcc-4.9.2

用 alternatives 命令添加 gcc 版本:

alternatives --install  /usr/bin/gcc  gcc  /usr/bin/x86_64-redhat-linux-gcc  50
alternatives --install  /usr/bin/gcc  gcc  /usr/local/gcc-5.4.0/bin/gcc  40

alternatives --install <链接> <名称> <路径> <优先度>
优先级用在 auto 模式下,数字越大优先级越高

输入数字选择版本:

[root@localhost bin]# alternatives --config  gcc

共有 2 个提供“gcc”的程序。

选项 命令

*+ 1           /usr/bin/x86_64-redhat-linux-gcc
   2           /usr/local/gcc-5.4.0/bin/gcc

按 Enter 保留当前选项[+],或者键入选项编号:2

*表示优先级最高的,+表示当前系统使用的
更多参数可以直接输入 alternatives 来显示

最后确认一下:

gcc -v

同理设置一下 g++ 的版本

6、其它

在实际使用中还有一些其它操作需要完成,详见第三部分
.

二、安装 GMP、MPFR、MPC

可以自动安装依赖,在 gcc 解压后的根目录执行如下命令即可:

./contrib/download_prerequisites

使用自动安装则不用在 configure 的参数中填写这三个库的路径,手动安装见下
.
.

MPFR 依赖 GMP,而 MPC 依赖 GMP 和 MPFR,所以要先安装 GMP,其次 MPFR,最后才是 MPC
以解压到 /usr/local/src/ 目录、安装到 /usr/local/ 目录为例

1、安装 gmp-6.1.0

tar jxf gmp-6.1.0.tar.bz2
mkdir /usr/local/gmp-6.1.0
mkdir /usr/local/src/gmp-6.1.0/build
cd /usr/local/src/gmp-6.1.0/build
/usr/local/src/gmp-6.1.0/configure --prefix=/usr/local/gmp-6.1.0/
make
make install

2、安装 mpfr-2.4.2

tar jxf mpfr-3.1.4.tar.bz2
mkdir /usr/local/mpfr-3.1.4
mkdir /usr/local/src/mpfr-3.1.4/build
cd /usr/local/src/mpfr-3.1.4/build
/usr/local/src/mpfr-3.1.4/configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
make
make install

3、安装 mpc-0.8.1

tar zxf mpc-1.0.3.tar.gz
mkdir /usr/local/mpc-1.0.3
mkdir /usr/local/src/mpc-1.0.3/build
cd /usr/local/src/mpc-1.0.3/build
/usr/local/src/mpc-1.0.3/configure --prefix=/usr/local/mpc-1.0.3  \
--with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
make
make install

.

三、其它问题

1、GLIBCXX_3.4.21 或 CXXABI_1.3.9 找不到

安装完成后,在使用时可能出现如下的错误提示:

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
/lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found

这是因为没有用新安装的 gcc 动态库替换旧的,首先确定一下当前使用的动态库内容:

[root@localhost bin]# strings /usr/lib64/libstdc++.so.6 | grep CXXABI
CXXABI_1.3
CXXABI_1.3.1
CXXABI_1.3.2
CXXABI_1.3.3
CXXABI_1.3.4
CXXABI_1.3.5
CXXABI_1.3.6
CXXABI_1.3.7
CXXABI_1.3.8
CXXABI_TM_1
[root@localhost bin]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看到当前使用的动态库没有包含新的版本,解决方法,用新安装的 gcc 库替换旧的,建立软连接即可:
(根据实际复制 lib、lib64 目录)

cp /usr/local/gcc-5.4.0/lib64/libstdc++.so.6.0.21  /usr/lib64/
rm /usr/lib64/libstdc++.so.6
ln -s /usr/lib64/libstdc++.so.6.0.21  /usr/lib64/libstdc++.so.6

2、某些情况下 g++ 的版本还是没有切换过来

这有可能是因为 c++ 的指向不对,先查看一下当前的 c++:

[root@localhost bin]# which c++
/usr/lib64/ccache/c++
[root@localhost bin]# ll /usr/lib64/ccache/c++
lrwxrwxrwx 1 root root 16 4月  11 2017 /usr/lib64/ccache/c++ -> ../../bin/ccache

删掉旧的 c++,重新建立一个软连接指向 g++ 即可:

mv /usr/lib64/ccache/c++  /usr/lib64/ccache/c++_bak
ln -s /usr/bin/g++  /usr/lib64/ccache/c++

.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值