您的位置:首页 > 其它

gcc-4.4.7升级到gcc-4.8.2

2016-10-20 16:17 281 查看
准备工作:

操作系统:centos6.5

位数:64位

gcc-4.8.2.tar.gz下载地址:
http://gcc.skazkaforyou.com/releases/gcc-4.8.2/gcc-4.8.2.tar.gz


一、编写本文的前提:

本人在centos6.5上安装qt-5.7时报了如下的错误:

cc1plus: 错误:无法识别的命令行选项“-std=c++11”


经过查阅相关资料发现原因是本centos6.5系统的gcc版本太低,查看当前gcc版本信息:

[root@localhost lib]# gcc -v
使用内建 specs。
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 -
c4bd
-build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
[root@localhost lib]#


当前版本信息为gcc-4.4.7,出现上面的原因至少需要gcc-4.7以上版本

二、升级gcc到gcc-4.8.2

1、通过上面链接下载源码并解压

#tar -xzvf  gcc-4.8.2.tar.gz


2、进入目录并进行配置

#cd gcc-4.8.2
#./contrib/download_prerequisites


这个神奇的脚本文件会帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力,脚本会自动下载三个依赖库别为gmp-4.3.2、mpfr-2.4.2、mpc-0.8.1

或者手动下载并安装

ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.2.tar.bz2 http://www.mpfr.org/mpfr-2.4.2/mpfr-2.4.2.tar.bz2 http://www.multiprecision.org/mpc/download/mpc-0.8.1.tar.gz


本人在这里使用了脚本,发现半天都跑不完,到最后居然不动了,因此本人手动下载安装,首先获取三个源码:

#tar -jxvf gmp-4.3.2.tar.bz2
#cd gmp-4.3.2
#./configure --prefix=/usr
# make
# make install

#tar -jxvf mpfr-2.4.2.tar.bz2
#cd mpfr-2.4.2
#./configure --prefix=/usr
#make
#install

#tar -xzvf mpc-0.8.1.tar.gz
#cd  mpc-0.8.1
#./configure --prefix=/usr
#make
#make install


注意:如果先安装mpc-0.8.1.tar.gz后安装mpfr-2.4.2.tar.bz2会报错

configure: error: libmpfr not found or uses a different ABI (including static vs shared).


所以就按上述步骤安装即可。

3、出错处理

进入gcc-4.8.2目录进行配置编译

#cd gcc-4.8.2
#./configure --prefix=/usr --enable-threads=posix --disable-checking --enable-languages=c,c++ --disable-multilib
#make


gcc的参数配置:

–prefix //默认gcc的安装目录,最好跟原有的gcc的安装目录一致

–disable-checking //生成的编译器在编译过程中不做额外检查,也可以使用–enable-checking=xxx来增加一些检查;

–enable-languages //指定gcc能编译哪些语言的文件,每种语言用逗号分隔, 例如 c,c++,java

–disable-multilib //默认gcc能在32位系统上将代码编译成64位程序,或者在64位系统上编译成32位程序,如果加上这个编译选项则表示关闭这个gcc的交叉编译功能。

make后会出现如下错误



按照提示打开config.log

找到错误的原因:“when loading shared libraries:libmpc.so.3:cannot open shared object file: No such file or directory”.



原来如此,接下来把mpc ,gmp,mpfr 的lib文件夹果断加入到 LD_LIBRARY_PATH 变量

注意此处的三个lib,根据你所安装的路径来设置。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib


1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令

ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*),

进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.

2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它”非/lib或/usr/lib”目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中

3) 如果共享库文件安装到了其它”非/lib或/usr/lib” 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径).

那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下,

其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

从上面我们可以发现我们解压安装的三个源码链接都安装在了/usr/lib目录下,因此不需要LD_LIBRARY_PATH环境变量,只需要执行

#ldconfig


对于ldconfig上面已经介绍了,接下来继续执行

#make


你会发现不会报上面错误了,但是这里make比较耗时,至少半个小时吧,

#make install


4、验证

验证:gcc -v;或者g++ -v,如果显示的gcc版本仍是以前的版本,就需要重启系统;或者可以查看gcc的安装位置:which gcc;然后在查看版本 /usr/local/bin/gcc -v,通常gcc都安装在该处位置

[root@localhost include]# /usr/local/bin/gcc -v
使用内建 specs。
COLLECT_GCC=/usr/local/bin/gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
目标:x86_64-unknown-linux-gnu
配置为:./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/lib --with-mpc=/usr/lib --with-mpfr=/usr/lib
线程模型:posix
gcc 版本 4.8.2 (GCC)
[root@localhost include]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: