手动安装升级GCC-8.3.0

本文档详细介绍了手动下载并编译GCC源码的过程,包括获取依赖包、安装顺序以及解决依赖问题的方法。在安装过程中,需要安装GMP、MPFR、MPC和ISL等依赖,并配置相应的环境变量。文章还提到了在不同系统上安装这些依赖的命令,以及遇到如找不到库文件或版本不匹配等问题时的解决策略。最后,讨论了如何在安装完成后设置GCC为默认编译器以及如何处理库路径设置和软链接问题。
摘要由CSDN通过智能技术生成

1、下载gcc源码:https://ftp.gnu.org/gnu/gcc/

2、解压源码    tar zxvf  gcc-8.3.0.tar.gz

3、查看安装前依赖的软件包: vim contrib/download_prerequisites

   30 gmp='gmp-6.1.0.tar.bz2'

   31 mpfr='mpfr-3.1.4.tar.bz2'

   32 mpc='mpc-1.0.3.tar.gz'

   33 isl='isl-0.18.tar.bz2'

4、下载对应的依赖包:

  https://ftp.gnu.org/gnu/gmp/

  https://ftp.gnu.org/gnu/mpfr/

  https://ftp.gnu.org/gnu/mpc/

  https://gcc.gnu.org/pub/gcc/infrastructure/

5、安装的顺序依次为:GMP,mpfr, mpc,isl 。最后安装gcc

6、安装依赖包:gmp

        $ tar -jxvf gmp-6.1.0.tar.bz2
        $ cd gmp-6.1.0
        $ mkdir temp
        $ cd temp

        $ ../configure --prefix=/usr/local/gmp-6.1.0         -----指定安装目录

        $ make

        $ make install

 7、安装依赖包:mpfr

        $ tar -zxvf mpfr-3.1.2.tar.gz 

        $ cd mpfr-3.1.2

        $ mkdir temp

        $ cd temp

        $ ../configure --prefix=/usr/local/mpfr-3.1.0 --with-gmp=/usr/local/gmp-5.0.1

        $ make

        $ make install

         其中--with=/usr/local/gmp-5.0.1就是依赖项, /usr/local/gmp-5.0.1是gmp的安装目录

8、安装依赖包:mpc

        $ tar -zxvf mpc-1.0.2.tar.gz

        $ cd mpc-1.0.2

        $ mkdir temp

        $ cd temp

        $ ../configure --prefix=/usr/local/mpc-1.0.2 --with-gmp=/usr/local/gmp-5.0.1 --with-mpfr=/usr/local/mpfr-3.1.0

        $ make

        $ make install

        记得后面两项的依赖项,也就是你的gmp和mpfr的安装目录

9、安装依赖包:isl   (isl只依赖gmp)

        $ tar -zxvf isl-0.18.tar.bz2

        $ cd isl-0.18

        $ mkdir temp

        $ cd temp

        ../configure --prefix=/usr/local/isl-0.18 --with-gmp=/usr/local/gmp-5.0.1

10、安装gcc

  首先查看服务器上原gcc安装时的配置选项 : gcc -v

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-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux

参照上面修改:主要修改--prefix为自己新的gcc安装,gmp,mpfr,mpc,isl路径指定为上面刚刚安装好的

mkdir build 

cd build 

../configure --prefix=/opt/xxx   .....

make -j100

make install

11、安装完成后在对应目录生成 /opt/xxx,  一堆目录,这就是可执行文件和头文件,还有一些库文件。

12、安装完成后,如何使用对应版本的gcc?

  3种方法,

  1、最简单的临时修改; 开一个shell终端,将PATH环境变量修改如下 export PATH=/opt/xxx:$PATH

    这样执行系统命令时,会优先到你的目录下找找可执行文件,自然就走你的gcc

  2、或者配置环境变量(这样就应用到了所有新shell终端):

    vim /etc/profile  写入  export PATH=/opt/xxx:$PATH

     3、修改、/usr/bin/gcc  /usr/bin/g++的符号链接

    ln -s /opt/xxx /bin/gcc /usr/bin/gcc

    ln -s /opt/xxx /bin/g++ /usr/bin/g++

    有可能还需要给cc,c++建立符号链接,看情况

    注意编译程序时系统可能会到/lib64/libstdc++.so.6 去链接lib,编译过程中可以关注,给libstdc++.so.6也建立符号链接到自己的gcc目录下对应的lib

13、找不到gmp、mpfr、mpc、isl怎么办?

    将路径添加到vim /etc/ld.so.conf文件中,路径一直到lib/

14、ldconfig  刷新库cache

其他参考

参考:https://www.jianshu.com/p/444169a3721a

  ===============================一下为遇到的其他问题,安装过程遇到问i,可以看下===================================================

3.5 gcc、g++、gcj设置

  要想使用GCC 4.3.4的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

  而原来gcc的路径是在usr/bin下。我们可以把gcc 4.3.4中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

$ cd /usr/bin

$ ln -s /usr/local/gcc-4.3.4/bin/gcc gcc434

$ ln -s /usr/local/gcc-4.3.4/bin/g++ g++434

$ ln -s /usr/local/gcc-4.3.4/bin/gcj gcj434

  这样,就可以分别使用gcc434、g++434、gcj434来调用GCC 4.1.2的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

3.6 库路径的设置

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,例如,如果GCC 4.3.4安装在/usr/local/gcc-4.3.4目录下,在RH Linux下可以直接在命令行上执行

$ export LD_LIBRARY_PATH=/usr/local/gcc-4.3.4/lib

最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了,在文件$HOME/.bash_profile中添加下面两句:

LD_LIBRARY_PATH=:/usr/local/mpc-1.0.2/lib:/usr/local/gmp-5.0.1/lib:/usr/local/mpfr-3.1.2/lib:/usr/local/gcc-4.3.4/lib

export LD_LIBRARY_PATH

或者在/etc/bash_profile 下添加。

重启系统设置生效,或者执行命令

$ source $HOME/.bash_profile

或者:

$ source /etc/bash_profile

用新的编译命令(gcc412、g++412等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

完成了Linux安装GCC,之后你就能轻松地编辑了。

在64位CentOS上编译GCC-4.8时,出现了GCC: Linux gnu/stubs-32.h: No such file or directory的错误。

查资料得知,这是缺少32位的嵌入式C库。在嵌入式开发环境配置时,也常遇到这个问题。

各平台的解决办法:

Debian Linux:

$ sudo apt-get install libc6-dev

Ubuntu Linux:

$ sudo apt-get install libc6-dev-i386

OpenSUSE / Novell Suse Linux (SLES):

# zypper in glibc-devel-32bit

RHEL / Fedora / CentOS / Scientific Linux:

$ sudo yum install glibc-devel.i686

问题1:gcc源码自身编译,找不到库的问题

gcc-7.3.0/host-x86_64-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libisl.so.15: cannot open shared object file: No such file or directory
make[3]: *** [s-selftest] Error 1
make[3]: Leaving directory `/root/Downloads/gcc-7.3.0/host-x86_64-pc-linux-gnu/gcc'
make[2]: *** [all-stage1-gcc] Error 2
make[2]: Leaving directory `/root/Downloads/gcc-7.3.0'
make[1]: *** [stage1-bubble] Error 2
make[1]: Leaving directory `/root/Downloads/gcc-7.3.0'

# 在"/usr/local/lib"目录下,怎么就找不到库libisl.so。

解决方法是:加到"/etc/ld.so.conf"或用"LD_LIBRARY_PATH"。

vi /etc/ld.so.conf  #添加库的路径/usr/local/lib/

然后终端命令行执行ldconfig,再重新编译。

问题2:gcc升级完成之后,编译项目工程时遇到的软连接问题

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

解决办法:/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found问题解决方法_$firecat全宏的代码足迹$-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值