欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

最佳实践 | 源码升级gcc

程序员文章站 2022-06-06 16:14:20
1、下载升级包所需软件 boost_1_60_0.tar.gz http://www.boost.org/users/history/version_1_60_0.html gcc 4.8.0.tar.gz http://ftp.gnu.org/gnu/gcc/gcc 4.8.0/ 必须 isl 0 ......

1、下载升级包所需软件

boost_1_60_0.tar.gz     http://www.boost.org/users/history/version_1_60_0.html

gcc-4.8.0.tar.gz        http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/            必须

isl-0.11.1.tar.gz       http://isl.gforge.inria.fr/                      必须

mpc-1.0.3.tar.gz        http://ftp.heanet.ie/mirrors/gnu/mpc/            必须

cloog-0.18.1.tar.gz     ftp://gcc.gnu.org/pub/gcc/infrastructure/        必须

gmp-5.1.3.tar.gz        http://ftp.yz.yamagata-u.ac.jp/pub/gnu/gmp/      必须

libelf-0.8.13.tar.gz    http://www.mr511.de/software/english.html        必须     

mpfr-3.1.3.tar.gz       http://ftp.gnu.org/gnu/mpfr/                     必须

2、依次安装相关的软件

  • gmp
  tar -jxvf gmp-6.1.0.tar.bz2
  cd gmp-6.1.0
  ./configure  --prefix=/usr/local/gmp
  make -j 4 && make install && echo $?
  • mpfr
  tar -zxvf mpfr-3.1.3.tar.gz
  cd mpfr-3.1.3
  ./configure --with-gmp-include=/usr/local/gmp/include \
    --with-gmp-lib=/usr/local/gmp/lib \
    --prefix=/usr/local/mpfr
  make -j 4 && make install && echo $?
  • mpc
  tar -zxvf mpc-1.0.3.tar.gz
  cd mpc-1.0.3
  ./configure --with-mpfr-include=/usr/local/mpfr/include \
    --with-mpfr-lib=/usr/local/mpfr/lib \
    --with-gmp-include=/usr/local/gmp/include \
    --with-gmp-lib=/usr/local/gmp/lib \
    --prefix=/usr/local/mpc
   make -j 4 && make install && echo $?
  • isl
  tar -zxvf isl-0.11.tar.gz
  cd isl-0.11
  ./configure --with-gmp-prefix=/usr/local/gmp --prefix=/usr/local/isl
  make -j 4 && make install && echo $?
  • cloog
  tar -zxvf cloog-0.18.0.tar.gz
  cd cloog-0.18.0
  ./configure --with-gmp-prefix=/usr/local/gmp \
    --with-isl-prefix=/usr/local/isl  \
    --prefix=/usr/local/cloog
  make -j 4 && make install && echo $?
  • gcc
  tar -zxvf gcc-4.8.0.tar.gz
  cd gcc-4.8.0
  编译安装gcc是需要指定各个依赖库的文件目录
  vi /etc/ld.so.conf

   /usr/local/isl/lib
   /usr/local/cloog/lib
   /usr/local/mpc/lib
   /usr/local/mpfr/lib
   /usr/local/gmp/lib
  保存、退出后执行命令 ldconfig

  ./configure \
     --with-mpfr=/usr/local/mpfr \
     --with-gmp=/usr/local/gmp \
     --with-mpc=/usr/local/mpc \
     --with-mpfr-include=/usr/local/mpfr/include \
     --with-mpfr-lib=/usr/local/mpfr/lib \
     --with-gmp-lib=/usr/local/gmp/lib \
     --with-gmp-include=/usr/local/gmp/include \
     --with-mpc-lib=/usr/local/mpc/lib \
     --with-mpc-inclue=/usr/local/mpc/include \
     --with-isl-include=/usr/local/isl/include \
     --with-isl-lib=/usr/local/isl/lib/ \
     --with-cloog-include=/usr/local/cloog/include \
     --with-cloog-lib=/usr/local/cloog/lib \
     --enable-languages=c,c++,objc,fortran,obj-c++,java \
     --enable-threads=posix \
     --disable-multilib \
     --with-pkgversion='suse linux'

  make -j 4 && make install && echo $?

3、验证

  gcc -v

4、报错解决

 1)解压gcc安装包直接编译

   错误信息:
   configure: error: building gcc requires gmp 4.2+, mpfr 2.4.0+ and mpc 0.8.0+.try the --with-gmp, --with-mpfr and/or --with-mpc options to specify their locatio
   错误原因:
   对gcc源码编译安装,需要gmp 4.2+,mpfr 2.4.0+ and mpc 0.8.0+的事先安装,如果检测不到默认头文件和库文件里存在上述安装包文件,则会报错。
   解决方案:
   通过安装gmp,mpfr,mpc安装包,并指定其库文件路径进行编译gcc即可,具体版本和安装步骤详细参考上述安装步骤。
   安装gmp,mpfr,mpc后执行下面编译脚本进行编译
   ./configure --with-mpfr=/usr/local/mpfr --with-gmp=/usr/local/gmp --with-mpc=/usr/local/mpc   --with-mpfr-include=/usr/local/mpfr/include --with-mpfr-lib=/usr/local/mpfr/lib --with-gmp-lib=/usr/local/gmp/lib --with-gmp-include=/usr/local/gmp/include --with-mpc-lib=/usr/local/mpc/lib --with-mpc-inclue=/usr/local/mpc/include --enable-languages=c,c++ --enable-threads=posix --disable-multilib

2)编译mpc安装包出错
   错误信息:
   /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libmpfr.a: could not read symbols: bad value
   collect2: ld returned 1 exit status
   make[2]: *** [libmpc.la] error 1
   make[2]: leaving directory `/tools/pxc/gcc/mpc-1.0.3/src'
   make[1]: *** [all-recursive] error 1
   make[1]: leaving directory `/tools/pxc/gcc/mpc-1.0.3'
   make: *** [all] error 2
   错误原因:
   编译mpc源码时,没有指定gmp、mpfr对应的安装路径(主要是库文件和头文件路径)
   解决方案:
   在编译脚本里加入相应的gmp、mpfr安装路径或者库文件+头文件路径
   ./configure --with-mpfr-include=/usr/local/mpfr/include  --with-mpfr-lib=/usr/local/mpfr/lib --with-gmp-include=/usr/local/gmp/include --with-gmp-lib=/usr/local/gmp/lib --prefix=/usr/local/mpc  
    或者
    ./configure --with-mpfr=/usr/local/mpfr --with-gmp=/usr/local/gmp --prefix=/usr/local/mpc

3)带gmp、mpfr、mpc编译参数,编译gcc源码出错
   错误信息:
   conftest.c:10:25: error: isl/version.h: no such file or directory
   错误原因:
   没安装isl安装包
   解决方案:
   安装isl-0.11.1.tar.gz,具体安装步骤参照上面内容。

4)源码编译isl出错
   错误信息:
   ./.libs/libisl.so: undefined reference to `__gmp_get_memory_functions'
   collect2: ld returned 1 exit status
   make[2]: *** [isl_cat] error 1
   ./.libs/libisl.so: undefined reference to `__gmp_get_memory_functions'
   collect2: ld returned 1 exit status
   make[2]: *** [isl_polyhedron_detect_equalities] error 1
   make[2]: leaving directory `/tools/pxc/gcc/isl-0.12.2'
   make[1]: *** [all-recursive] error 1
   make[1]: leaving directory `/tools/pxc/gcc/isl-0.12.2'
   make: *** [all] error 2
   错误原因:
   isl编译安装,需要在指定gmp的安装路径
   解决方案:
   在编译参数里指定gmp的安装路径,并且格式为--with-gmp-prefix==,不能用--with-gmp
   ./configure    --with-gmp-prefix=/usr/local/gmp --prefix=/usr/local/isl
   参考文件:https://groups.google.com/forum/#!msg/isl-development/ejzlcmty4nc/prkxb9notcoj

5)安装完gmp,mpfr,mpc,isl后,源码编译gcc出错
   错误信息:
   configure:6098: gcc -c -g -o2 -dcloog_int_gmp  -i/usr/local/isl/include -i/usr/local/gmp/include -i/usr/local/mpfr/include -i/usr/local/mpc/include   conftest.c >&5
   conftest.c:10:27: error: cloog/version.h: no such file or directory
   conftest.c: in function 'main':
   conftest.c:15: error: 'choke' undeclared (first use in this function)
   conftest.c:15: error: (each undeclared identifier is reported only once
   conftest.c:15: error: for each function it appears in.)
   conftest.c:15: error: expected ';' before 'me'
   错误原因:
   缺少安装包cloog,没找到相应的库文件。
   解决方案:
   安装cloog-0.18.1.tar.gz ,具体安装步骤参照上面安装步骤,安装cloog后,继续编译gcc
   ./configure --with-mpfr=/usr/local/mpfr --with-gmp=/usr/local/gmp --with-mpc=/usr/local/mpc   --with-mpfr-include=/usr/local/mpfr/include --with-mpfr-lib=/usr/local/mpfr/lib --with-gmp-lib=/usr/local/gmp/lib --with-gmp-include=/usr/local/gmp/include --with-mpc-lib=/usr/local/mpc/lib --with-mpc-inclue=/usr/local/mpc/include  --with-isl-include=/usr/local/isl/include --with-isl-lib=/usr/local/isl/lib/ --with-cloog-include=/usr/local/cloog/include --with-cloog-lib=/usr/local/cloog/lib --enable-languages=c,c++ --enable-threads=posix --disable-multilib --disable-bootstrap --disable-libstdcxx-pch

6)安装cloog遇到下属错误
   错误信息:
   ./conftest: error while loading shared libraries: libisl.so.10: cannot open shared object file: no such file or directory
   错误原因:
   找不到isl的库文件,需要在/etc/ld.so.conf中添加以下内容/usr/local/isl/lib,并通过ldconfig使其生效。
   解决方案:
   通过ld_library_path指定isl库文件路径或者在/etc/ld.so.conf中添加以下内容/usr/local/isl/lib,并通过ldconfig使其生效。然后通过相应的编辑参数指定isl的库文件和头文件,进行cloog编译安装。通过strings /etc/ld.so.cache | grep libisl  查看是否已经将库文件写入缓存。

7)下属错误可以忽略
   错误信息01:
   conftest.cpp:11:2: error: #error -static-libstdc++ not implemented

8)下属错误可以忽略
  错误信息:
  ldconfig: /usr/local/isl/lib/libisl.so.10.1.0-gdb.py is not an elf file - it   has the wrong magic bytes at the start.
  错误原因:
  /usr/local/isl/lib/libisl.so.10.1.0-gdb.py 文件类型错误
  解决方案:
  rm /usr/local/isl/lib/libisl.so.10.1.0-gdb.py

5、参考文档

http://*.com/questions/9450394/how-to-install-gcc-piece-by-piece-with-gmp-mpfr-mpc-elf-without-shared-libra
https://groups.google.com/forum/#!msg/isl-development/ejzlcmty4nc/prkxb9notcoj