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://stackoverflow.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

最佳实践 | 源码升级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. Delphi 中控件路径加入不进去解决方法

    使用notepa++打开project中的*.dproj文件,在里面找到相似例如以下的区域 <DCC_UnitSearchPath>T:\BusinessSkinForm1006Sourc ...

  2. CocoaPods建立私有仓库

    项目管理:CocoaPods建立私有仓库 2015-05-08 10:22 编辑: lansekuangtu 分类:iOS开发 来源:agdsdl 0 6367 CocoaPods项目管理私有仓库 招 ...

  3. .m文件导入C++头文件带来的错误

    这几天的工作挖了不少的坑.遇到了各种千奇百怪的错误,如今好好总结一下. 新建一个project,然后新建HelloCPP.h,HelloCPP.cpp文件.HelloCPP.h文件内容例如以下: #i ...

  4. Java-java-com-util-common-service:ServiceException.java

    ylbtech-Java-java-com-util-common-service:ServiceException.java 1.返回顶部 1. package com.shineyoo.manag ...

  5. day-05 python函数

    # #-*- coding:utf-8 -*-# 1:编写一个名为 make_shirt()的函数,它接受一个尺码以及要印到 T 恤上的字样.这个函数应打印一个句子,概要地说明 T 恤的尺码和字样.d ...

  6. Java IO流文件复制/解压的几种方法总结

    引言 在JavaWeb项目开发过程,涉及到IO文件的读写操作以及文件的复制copy操作是作为一个程序员不可获取的知识,那接下来就总结一些copy文件的一些方法,与大家通过学习,如果还有其他更好的方法, ...

  7. 【钓起来的tips系列】

    一.求n的阶乘: #include<bits/stdc++.h> using namespace std; int n; int jc(int k) { ); )*k; } /*int j ...

  8. android黑科技系列——防自动抢红包外挂原理解析

    一.前言 春节过年发个红包本来就是为了讨个喜庆,朋友亲戚之间的关系交流,但是现在随着技术变革,抢红包插件越来越多,导致现在不太愿意发红包了,特别是在一个多人群里,潜水的非常多,但是丢个红包瞬间就没了, ...

  9. VMWare虚拟机Centos 6.9中的 linux 配置静态ip地址上外网

    1.查看网络 # ifconfig 发现网络还没有配置,ping不通 2.修改网卡配置文件 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 添加如下配置 ...

  10. 安装完MongoDB后尝试mongod -dbpath命令为什么会一直卡在连接端口?

    1.现象如下 Linux Windows 2.原因 其实,这不是卡住了,而是告诉我们.数据库已经启动,而且这个东东还不能关掉,关掉意味着数据库也关了.一开始我也是傻逼逼的在那等了一天,哎.... 3. ...