1、下载升级包所需软件

  1. boost_1_60_0.tar.gz http://www.boost.org/users/history/version_1_60_0.html
  2. gcc-4.8.0.tar.gz http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/ 必须
  3. isl-0.11.1.tar.gz http://isl.gforge.inria.fr/ 必须
  4. mpc-1.0.3.tar.gz http://ftp.heanet.ie/mirrors/gnu/mpc/ 必须
  5. cloog-0.18.1.tar.gz ftp://gcc.gnu.org/pub/gcc/infrastructure/ 必须
  6. gmp-5.1.3.tar.gz http://ftp.yz.yamagata-u.ac.jp/pub/GNU/gmp/ 必须
  7. libelf-0.8.13.tar.gz http://www.mr511.de/software/english.html 必须
  8. mpfr-3.1.3.tar.gz http://ftp.gnu.org/gnu/mpfr/ 必须

2、依次安装相关的软件

  • Gmp
  1. tar -jxvf gmp-6.1.0.tar.bz2
  2. cd gmp-6.1.0
  3. ./configure --prefix=/usr/local/gmp
  4. make -j 4 && make install && echo $?
  • Mpfr
  1. tar -zxvf mpfr-3.1.3.tar.gz
  2. cd mpfr-3.1.3
  3. ./configure --with-gmp-include=/usr/local/gmp/include \
  4. --with-gmp-lib=/usr/local/gmp/lib \
  5. --prefix=/usr/local/mpfr
  6. make -j 4 && make install && echo $?
  • Mpc
  1. tar -zxvf mpc-1.0.3.tar.gz
  2. cd mpc-1.0.3
  3. ./configure --with-mpfr-include=/usr/local/mpfr/include \
  4. --with-mpfr-lib=/usr/local/mpfr/lib \
  5. --with-gmp-include=/usr/local/gmp/include \
  6. --with-gmp-lib=/usr/local/gmp/lib \
  7. --prefix=/usr/local/mpc
  8. make -j 4 && make install && echo $?
  • Isl
  1. tar -zxvf isl-0.11.tar.gz
  2. cd isl-0.11
  3. ./configure --with-gmp-prefix=/usr/local/gmp --prefix=/usr/local/isl
  4. make -j 4 && make install && echo $?
  • Cloog
  1. tar -zxvf cloog-0.18.0.tar.gz
  2. cd cloog-0.18.0
  3. ./configure --with-gmp-prefix=/usr/local/gmp \
  4. --with-isl-prefix=/usr/local/isl \
  5. --prefix=/usr/local/cloog
  6. make -j 4 && make install && echo $?
  • Gcc
  1. tar -zxvf gcc-4.8.0.tar.gz
  2. cd gcc-4.8.0
  3. 编译安装gcc是需要指定各个依赖库的文件目录
  4. vi /etc/ld.so.conf
  5. /usr/local/isl/lib
  6. /usr/local/cloog/lib
  7. /usr/local/mpc/lib
  8. /usr/local/mpfr/lib
  9. /usr/local/gmp/lib
  10. 保存、退出后执行命令 ldconfig
  11. ./configure \
  12. --with-mpfr=/usr/local/mpfr \
  13. --with-gmp=/usr/local/gmp \
  14. --with-mpc=/usr/local/mpc \
  15. --with-mpfr-include=/usr/local/mpfr/include \
  16. --with-mpfr-lib=/usr/local/mpfr/lib \
  17. --with-gmp-lib=/usr/local/gmp/lib \
  18. --with-gmp-include=/usr/local/gmp/include \
  19. --with-mpc-lib=/usr/local/mpc/lib \
  20. --with-mpc-inclue=/usr/local/mpc/include \
  21. --with-isl-include=/usr/local/isl/include \
  22. --with-isl-lib=/usr/local/isl/lib/ \
  23. --with-cloog-include=/usr/local/cloog/include \
  24. --with-cloog-lib=/usr/local/cloog/lib \
  25. --enable-languages=c,c++,objc,fortran,obj-c++,java \
  26. --enable-threads=posix \
  27. --disable-multilib \
  28. --with-pkgversion='SUSE Linux'
  29. make -j 4 && make install && echo $?

3、验证

  1. gcc -v

4、报错解决

  1. 1)解压gcc安装包直接编译
  2. 错误信息:
  3. 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
  4. 错误原因:
  5. gcc源码编译安装,需要GMP 4.2+,MPFR 2.4.0+ and MPC 0.8.0+的事先安装,如果检测不到默认头文件和库文件里存在上述安装包文件,则会报错。
  6. 解决方案:
  7. 通过安装gmp,mpfr,mpc安装包,并指定其库文件路径进行编译gcc即可,具体版本和安装步骤详细参考上述安装步骤。
  8. 安装gmp,mpfr,mpc后执行下面编译脚本进行编译
  9. ./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
  10. 2)编译mpc安装包出错
  11. 错误信息:
  12. /usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/libmpfr.a: could not read symbols: Bad value
  13. collect2: ld returned 1 exit status
  14. make[2]: *** [libmpc.la] Error 1
  15. make[2]: Leaving directory `/tools/PXC/gcc/mpc-1.0.3/src'
  16. make[1]: *** [all-recursive] Error 1
  17. make[1]: Leaving directory `/tools/PXC/gcc/mpc-1.0.3'
  18. make: *** [all] Error 2
  19. 错误原因:
  20. 编译mpc源码时,没有指定gmp、mpfr对应的安装路径(主要是库文件和头文件路径)
  21. 解决方案:
  22. 在编译脚本里加入相应的gmp、mpfr安装路径或者库文件+头文件路径
  23. ./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
  24. 或者
  25. ./configure --with-mpfr=/usr/local/mpfr --with-gmp=/usr/local/gmp --prefix=/usr/local/mpc
  26. 3)带gmp、mpfr、mpc编译参数,编译gcc源码出错
  27. 错误信息:
  28. conftest.c:10:25: error: isl/version.h: No such file or directory
  29. 错误原因:
  30. 没安装isl安装包
  31. 解决方案:
  32. 安装isl-0.11.1.tar.gz,具体安装步骤参照上面内容。
  33. 4)源码编译isl出错
  34. 错误信息:
  35. ./.libs/libisl.so: undefined reference to `__gmp_get_memory_functions'
  36. collect2: ld returned 1 exit status
  37. make[2]: *** [isl_cat] Error 1
  38. ./.libs/libisl.so: undefined reference to `__gmp_get_memory_functions'
  39. collect2: ld returned 1 exit status
  40. make[2]: *** [isl_polyhedron_detect_equalities] Error 1
  41. make[2]: Leaving directory `/tools/PXC/gcc/isl-0.12.2'
  42. make[1]: *** [all-recursive] Error 1
  43. make[1]: Leaving directory `/tools/PXC/gcc/isl-0.12.2'
  44. make: *** [all] Error 2
  45. 错误原因:
  46. isl编译安装,需要在指定gmp的安装路径
  47. 解决方案:
  48. 在编译参数里指定gmp的安装路径,并且格式为--with-gmp-prefix==,不能用--with-gmp
  49. ./configure --with-gmp-prefix=/usr/local/gmp --prefix=/usr/local/isl
  50. 参考文件:https://groups.google.com/forum/#!msg/isl-development/ejZLCmty4Nc/PrKXb9noTCoJ
  51. 5)安装完gmp,mpfr,mpc,isl后,源码编译gcc出错
  52. 错误信息:
  53. 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
  54. conftest.c:10:27: error: cloog/version.h: No such file or directory
  55. conftest.c: In function 'main':
  56. conftest.c:15: error: 'choke' undeclared (first use in this function)
  57. conftest.c:15: error: (Each undeclared identifier is reported only once
  58. conftest.c:15: error: for each function it appears in.)
  59. conftest.c:15: error: expected ';' before 'me'
  60. 错误原因:
  61. 缺少安装包cloog,没找到相应的库文件。
  62. 解决方案:
  63. 安装cloog-0.18.1.tar.gz ,具体安装步骤参照上面安装步骤,安装cloog后,继续编译gcc
  64. ./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
  65. 6)安装cloog遇到下属错误
  66. 错误信息:
  67. ./conftest: error while loading shared libraries: libisl.so.10: cannot open shared object file: No such file or directory
  68. 错误原因:
  69. 找不到isl的库文件,需要在/etc/ld.so.conf中添加以下内容/usr/local/isl/lib,并通过ldconfig使其生效。
  70. 解决方案:
  71. 通过LD_LIBRARY_PATH指定isl库文件路径或者在/etc/ld.so.conf中添加以下内容/usr/local/isl/lib,并通过ldconfig使其生效。然后通过相应的编辑参数指定isl的库文件和头文件,进行cloog编译安装。通过strings /etc/ld.so.cache | grep libisl 查看是否已经将库文件写入缓存。
  72. 7)下属错误可以忽略
  73. 错误信息01
  74. conftest.cpp:11:2: error: #error -static-libstdc++ not implemented
  75. 8)下属错误可以忽略
  76. 错误信息:
  77. 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.
  78. 错误原因:
  79. /usr/local/isl/lib/libisl.so.10.1.0-gdb.py 文件类型错误
  80. 解决方案:
  81. rm /usr/local/isl/lib/libisl.so.10.1.0-gdb.py

5、参考文档

  1. http://stackoverflow.com/questions/9450394/how-to-install-gcc-piece-by-piece-with-gmp-mpfr-mpc-elf-without-shared-libra
  2. https://groups.google.com/forum/#!msg/isl-development/ejZLCmty4Nc/PrKXb9noTCoJ

最佳实践 | 源码升级gcc的更多相关文章

  1. <未测>源码升级安装glibc和rpm升级glibc

    源码升级安装glibc和rpm升级glibc http://jacklin9.spaces.live.com/blog/cns!A891B52E1182AFB2!346.entry http://bl ...

  2. 完美原创:centos7.1 从源码升级安装Python3.5.2

    (原创)完美原创:centos7.1 从源码升级安装Python3.5.2 下载Python3.5.2源码:https://www.python.org/downloads/release/pytho ...

  3. SUSE10 SP4源码升级Python到2.6.6

    1.安装依赖包(CentOS可采用yum) zypper in gcc gcc-c++ openssl-devel-32bit openssl-devel readline-devel readlin ...

  4. 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )

    64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...

  5. MySQL源码升级

    mysql源码升级 升级的方法一般有两类: 1.利用mysqldump来直接导出sql文件,导入到新库中,这种方法是最省事儿的,也是最保险的,缺点的话,也显而易见,大库的mysqldump费时费力. ...

  6. centos7.1 从源码升级安装Python3.5.2

    http://blog.csdn.net/tengyunjiawu_com/article/details/53535153 centos7.1 从源码升级安装Python3.5.2(我写的,请大家度 ...

  7. centos6.5源码升级内核

    centos6.5源码升级内核 升级前 系统版本:  CentOS5.5 内核版本:  2.6.18-194.el5 升级前做过简单配置文件修改 yum -y upgrade    升级后 系统版本: ...

  8. CentOS7源码升级OpenSSL和OpenSSH

    一.CentOS7升级OpenSSL 1.查看ssl版本及下载相关依赖包 openssl version -a yum install -y gcc openssl-devel pam-devel r ...

  9. spring security 实践 + 源码分析

    前言 本文将从示例.原理.应用3个方面介绍 spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 Spring Security 是 ...

随机推荐

  1. Tomcat类载入器机制(Tomcat源代码解析六)

    要说Tomcat的Classloader机制,我们还得从Bootstrap開始.在BootStrap初始化的时候.调用了org.apache.catalina.startup.Bootstrap#in ...

  2. [PWA] Optimize Assets Delivery using preload and prefetch

    By default, browsers load the assets in a render-blocking way. Modern browsers introduced prefetch a ...

  3. double型转换成string型

    double型转换成string型 题目描写叙述: 如有一个函数.其可接受一个long double參数,并将參数转换为字符串.结果字符串应保留两位小数,比如,浮点值123.45678应该生成&quo ...

  4. web端log4net输出错误日志到mysql

    1.引用log4net 2.配置log4net.config文件 <?xml version="1.0" encoding="utf-8" ?> & ...

  5. unity中 拖拽随意的对象

    孙广东   2015.8.16 目的 :  我们能简单的通过 鼠标位置 得到目标对象  假设没有使用刚体组件 Step - 1: 在3D项目中设置场景.  一个空对象命名为: DragAndDrop ...

  6. UVA 11021 - Tribles(概率递推)

    UVA 11021 - Tribles 题目链接 题意:k个毛球,每一个毛球死后会产生i个毛球的概率为pi.问m天后,全部毛球都死亡的概率 思路:f[i]为一个毛球第i天死亡的概率.那么 f(i)=p ...

  7. C++常用字符串分割方法实例汇总

    投稿:shichen2014 字体:[增加 减小] 类型:转载 时间:2014-10-08我要评论 这篇文章主要介绍了C++常用字符串分割方法实例汇总,包括了strtok函数.STL.Boost等常用 ...

  8. Java执行定时任务

    一.用java.util.Timer 使用JAVA类Timer可实现简单的延迟和周期性任务,其中的任务使用java.util.TimerTask表示.任务的执行方式有两种: 按固定速率执行:即sche ...

  9. HP Unix vsftp服务配置

    HP Unix vsftp 服务配置: /opt/ssh/utils/ssh_chroot_setup.sh 运行脚本,会提示输入要建立的vsftp账号和要限制的家目录, 比如要限制的家目录为/Jia ...

  10. P1966 火柴排队(逆序对)

    P1966 火柴排队 题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi) ...