一、环境
虚拟机VMware Workstation Pro。安装centos系统,使用uname -a命令查看主机信息,显示内容如下:
Linux server 2.6.32-642.el6.i686 #1 SMP Tue May 10 16:13:51 UTC 2016 i686 i686 i386 GNU/Linux
使用gcc-v命令查看现有gcc版本是4.4.7-17,该版本的并没有安装g++编译器。显示内容如下:
Using built-in specs.
Target: i686-redhat-linux
Configured with: ../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=i686 --build=i686-redhat-linux
Thread model: posix
gcc version 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)
二、安装过程
从官网http://ftp.gnu.org/gnu/gcc/上下载的最新gcc安装包, 包名:gcc-4.8.0.tar.gz
实验环境放在/home/server/Desktop/code/目录下,可以放到其他的目录
注意:安装工作全程使用root用户,不使用其他的用户
解压:
tar-zxvf gcc-4.8.0.tar.gz
cd /home/wangjun/Desktop/code/
tar -zxvf gcc-4.8.0.tar.gz
cd ../
创建gcc编译安装路径,命令为gcc-build-4.8.0:
mkdirgcc-build-4.8.0
cd gcc-build-4.8.0
../gcc-4.8.0/configure--enable-checking=release --enable-languages=c,c++ --disable-multilib
执行完这个后,会提示没有安装gmp,mpfr,mpc,查看gcc-4.8.0/ contrib下面
download_prerequisites文件,可以看到需要安装的软件和版本,从指定ftp://gcc.gnu.org/pub/gcc/infrastructure/服务器上下载,然后解压,并创建软链接文件,因为虚拟机不能连外网,这里手动操作。注意:软件版本要正确
下载安装包并解压
安装包放到gcc-4.8.0目录下
tar xjf gmp-4.3.2.tar.bz2
tar xjf mpfr-2.4.2.tar.bz2
tar xzf mpc-0.8.1.tar.gz
ln -sf gmp-4.3.2 gmp
ln -sf mpfr-2.4.2 mpfr
ln -sf mpc-0.8.1 mpc
继续执行
cd ../gcc-build-4.8.0
../gcc-4.8.0/configure--enable-checking=release --enable-languages=c,c++ --disable-multilib
configure成功,执行make,会
原因是目前现有版本gcc4.4.7-17没有支持g++编译器,使用rpm工具安装g++
configure: error: C++ compiler missing or inoperational make[2]: *** [configure-stage1-libcpp] Error 1 make[2]: Leaving directory `/home/wangjun/Desktop/code/gcc-build-4.8.0' make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory `/home/wangjun/Desktop/code/gcc-build-4.8.0' make: *** [all] Error 2
升级 gcc4.4.7-17到gcc4.4.7-18
执行 rpm -ivh gcc-4.4.7-18.el6.i686.rpm,可以看到有很多依赖的库没有安装,把依赖的库都安装了。
[server@client /home/server/Desktop/code/rpm]$rpm -ivh gcc-4.4.7-18.el6.i686.rpm
warning: gcc-4.4.7-18.el6.i686.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies: cpp = 4.4.7-18.el6 is needed by gcc-4.4.7-18.el6.i686 libgcc >= 4.4.7-18.el6 is needed by gcc-4.4.7-18.el6.i686 libgomp = 4.4.7-18.el6 is needed by gcc-4.4.7-18.el6.i686
rpm -ivh cpp-4.4.7-18.el6.i686.rpm,可以看到和以前安装有所冲突,添--force强制安装
[root@client rpm]# rpm -ivh cpp-4.4.7-18.el6.i686.rpm warning: cpp-4.4.7-18.el6.i686.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] file /usr/bin/cpp from install of cpp-4.4.7-18.el6.i686 conflicts with file from package cpp-4.4.7-17.el6.i686
执行rpm -ivh --force cpp-4.4.7-18.el6.i686.rpm命令,安装成功
[root@client rpm]# rpm -ivh --force cpp-4.4.7-18.el6.i686.rpm warning: cpp-4.4.7-18.el6.i686.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY Preparing... ########################################### [100%] 1:cpp ########################################### [100%]
注意:当rpm安装出现问题时,可以参考上面的方法解决
覆盖安装
rpm -ivh --force cpp-4.4.7-18.el6.i686.rpm
rpm -ivh --force libgcc-4.4.7-18.el6.i686.rpm
rpm -ivh --force libgomp-4.4.7-18.el6.i686.rpm
卸载旧的版本
rpm -e gcc-4.4.7-17.el6.i686
rpm -e libgomp-4.4.7-17.el6.i686
rpm -e cpp-4.4.7-17.el6.i686
rpm -e libgcc-4.4.7-17.el6.i686
安装gcc-4.4.7-18
rpm -ivh gcc-4.4.7-18.el6.i686.rpm
覆盖安装
rpm -ivh --force libstdc++-4.4.7-18.el6.i686.rpm
rpm -ivh libstdc++-devel-4.4.7-18.el6.i686.rpm
卸载旧的版本
rpm -e libstdc++-4.4.7-17.el6.i686
rpm -ivh gcc-c++-4.4.7-18.el6.i686.rpm
执行gcc -v查看版本为 4.4.7-18
继续上面的安装步骤
cd gcc-build-4.8.0
make
这个安装过程很漫长,大概还有40分钟,需要耐性等待
执行
make install
替换以前的版本
cd /usr/bin
cp gcc gcc.bak
cp g++ g++.bak
rm -f gcc
rm -f g++
ln -sf/usr/local/bin/gcc /usr/bin/gcc
ln -sf/usr/local/bin/g++ /usr/bin/g++
查看编译器版本 g++ -v 和gcc –v
Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib Thread model: posix gcc version 4.8.0 (GCC)
Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper Target: i686-pc-linux-gnu Configured with: ../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib Thread model: posix gcc version 4.8.0 (GCC)
rmp安装包地址:http://mirrors.163.com/centos/6.9/os/i386/Packages/