编译升级GCC 4.9.4 详解

栏目:Linux 作者:小天 点击: 8,964 次

第一步

首先下载gcc源码包

wget https://ftp.gnu.org/gnu/gcc/gcc-4.9.4/gcc-4.9.4.tar.bz2

第二步

将下载好的文件放在非root用户也有读权限的地方,例如 /home/myuser 或者 /usr/gcc-build/ 下面第四步我会讲为什么要这么做.

第三步

解压文件,做一些准备工作

tar xjvf gcc-4.9.4.tar.bz2 && cd gcc-4.9.4

由于好奇心态,我编辑download_prerequisites文件使用了官方的下载地址,你可以选择更新它:下载地址

./contrib/download_prerequisites

安装gcc需要5个组件,download_prerequisites 的任务就是下载这些组件分别是:
cloog-0.18.1
gmp-4.3.2
isl-0.12.2
mpc-0.8.1
mpfr-2.4.2

如果遇到download_prerequisites里面的地址无法访问,推荐自行下载这些组件到目录gcc-4.9.4/,解压。
然后将download_prerequisites里面的wget全部注释掉,再执行 :

./contrib/download_prerequisites

做好上面的准备就可以configure了,建议另建一个目录来存放编译文件,默认安装目录是 /usr/local/ 可以使用 –prefix 修改自定义路径。

mkdir gcc-4.9.4-build && cd gcc-4.9.4-build
../configure --prefix=/usr/local/gcc-4.9.4 --enable-bootstrap --enable-build-with-cxx --enable-cloog-backend=isl --disable-libjava-multilib --enable-checking=release --enable-gold --enable-ld --enable-libada --enable-libssp --enable-lto --enable-objc-gc --enable-vtable-verify --enable-checking=release --enable-languages=c,c++,objc,obj-c++,fortran --disable-multilib
make -j4
make install

一定要指定安装路径,否则编译时会与旧版本的GCC出现冲突,出现[stage2-bubble] Error 2错误,gcc编译编译很慢,一切顺利的话,取决于你的配置40分钟-1个小时后再来看结果吧,我用公司的16核服务器编译了20分钟。

第四步

在.bashrc中配置库文件和头文件路径

export PATH=/usr/local/gcc-4.9.4/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib64/:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include/:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=/usr/local/include/:$CPLUS_INCLUDE_PATH

替换旧版本:

mv /usr/bin/gcc /usr/bin/gcc.bckup
ln -s /usr/local/gcc-4.9.4/bin/gcc /usr/bin/gcc

执行 gcc -v 可以看到下面的信息, 恭喜你成功一半了!

gcc -v

使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.9.4/lto-wrapper
目标:x86_64-unknown-linux-gnu
配置为:../gcc-4.9.4/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 4.9.4 (GCC)

上面第二步,我讲到了讲解压的gcc-4.9.4 放到 非root用户也有读权限 的目录,并不是因为无法编译,而是在调试过程中,一些常用的stl容器和算法都没有问题,但 std::string 等组件定位到了我的编译目录.

具体原因我没细查~ 可能是因为 libstdc++-v3是一个过时的库,没有默认安装到/usr/local/include/

像这样:
/root/gcc-4.9.4/gcc-build-4.9.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/basic_string.h: No such file or directory

/root/gcc-4.9.4/gcc-build-4.9.4/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/allocator.h: No such file or directory

通过上面也看到了,其实也不是没有这个文件,而是非root用户是没有权限访问root用户下面内容的

第 五步

难道上面不是已经完成安装了吗? 如果你只是编译不调试的话,确实是安装完毕了,不用往下看了。这个问题曾整整折腾了我一天时间,各种google,各种资料最后才算解决。

我也看了其他人的教程,都没有提到这一点,特此写这篇文章也算是加深记忆和便于以后查看,请继续看一步

第六步

安装BINUTILS(链接器,汇编器 等),有些源码需要这个来支持

wget http://mirrors.ustc.edu.cn/gnu/binutils/binutils-2.28.tar.bz2
tar -jxvf binutils-2.28.tar.bz2 && cd binutils-2.28
./configure --prefix=/usr/local/gcc-4.9.4 --with-gmp=/usr/local/gcc-4.9.4 --with-mpc=/usr/local/gcc-4.9.4 --with-mpfr=/usr/local/gcc-4.9.4 --with-isl=/usr/local/gcc-4.9.4 --with-cloog=/usr/local/gcc-4.9.4 --enable-build-with-cxx --enable-gold --enable-libada --enable-libssp --enable-lto --enable-objc-gc --disable-werror
make j4 && make install

第 七步

升级完gcc还需要升级gdb!!! 因为版本不匹配等原因导致调试 不能 print 变量提示找不到符号,以及其他莫名其妙的问题…

这里我选择安装的时候gdb-7.9 ,安装gdb需要4个组件 ,python,python-devel ,texinfo,ncurses-devel

编译gdb时报错误 configure: error: no termcap library found 是缺少 ncurses-devel
编译过程中遇到莫名奇妙的报错,例如:ser-unix.c:118:1: error: conflicting types for ‘get_tty_state’,清理干净configure目录,使用root用户安装就好了

yum install texinfo
yum install ncurses-devel
yum install python
yum install python-devel
wget http://mirrors.ustc.edu.cn/gnu/gdb/gdb-7.9.tar.gz
tar xzvf gdb-7.9.tar.gz
cd gdb-7.9
./configure --with-python
make
make install

如果在安装过程中提示找不到makeinfo命令或其他错误,切换root用户再试一次,具体原因我没细查

没有python的支持也可以编译,去掉–with-python选项就行了,但是gdb是无法加载python脚本的,例如c++ 的 pretty-printer 脚本是无法使用的

可参考一件安装:https://www.owent.net/2014/04/linux-编译安装-gcc-4-9.html



声明: 本文由( 小天 )原创编译,转载请保留链接: 编译升级GCC 4.9.4 详解

------====== 本站公告 ======------
欢迎使用趣域网域名百科,我们将长期提供域名使用相关知识和投资域名的方法和技巧;并提供主机、服务器的解决问题和网站运营方法。