编译gcc-4.6.3

准备

下载GCC 源码包 : gcc-4.6.3.tar.bz2

下载GCC 依赖包: gmp-5.0.4.tar.bz2, mpfr-3.1.0.tar.bz2 ,mpc-0.9.tar.gz

解压gcc-4.6.3.tar.bz2 指令=》 [flydream@flydream opt]$ tar -xvf gcc-4.6.3.tar.bz2

进入[flydream@flydream opt]$ cd gcc-4.6.3

把下载的gmp-5.0.4.tar.bz2, mpfr-3.1.0.tar.bz2 ,mpc-0.9.tar.gz包放到gcc-4.6.3目录

在gcc-4.6.3目录下分别解压上面的三个包

编译依赖

先安装gmp-5.0.4.tar.bz2

# 进入gmp目录:

$ cd gmp-5.0.4

# 建立安装路径:

$ mkdir gmp_install

$ cd gmp_install

$ ../configure --prefix=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install

$ make

$ make install

安装mpfr-3.1.0.tar.bz2

# 进入mpfr目录

$ cd mpfr-3.1.0

# 建立安装路径: $

$ mkdir mpfr_install

$ cd mpfr_install

$ ../configure --prefix=/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install --with-gmp=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install

$ make

$ make install

然后安装mpc-0.9.tar.gz

# 进入mpc

# 建立安装路径:

$ mkdir mpc_install

cd mpc_install

$ ../configure --prefix=/opt/gcc-4.6.3/mpc-0.9/mpc_install --with-gmp=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install --with-mpfr=/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install

$ make

$ make install

在编译GCC的过程中可能出现“configure: error: cannot compute suffix of object files: cannot compile”的错误,解决方法是:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/gcc-4.6.3/mpc-0.9/mpc_install/lib:/opt/gcc-4.6.3/gmp-5.0.4/gmp_install/lib:/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install/lib

最后编译安装GCC

在GCC源码目录中建立安装路径

$ mkdir gcc_install

$ cd gcc_install

$ ../configure --prefix=/opt/gcc_install --with-gmp=/opt/gcc-4.6.3/gmp-5.0.4/gmp_install --with-mpfr=/opt/gcc-4.6.3/mpfr-3.1.0/mpfr_install ----with-mpc=/opt/gcc-4.6.3/mpc-0.9/mpc_install --enable-checking=release --program-suffix=4.6.3 --enable-languages=c,c++

$ make

$ make install

注意–program-suffix参数,表示生成的可执行文件的后缀。–enable-languages参数表示要支持的语言。最后make; make install即可。make的时候还有个小技巧:因为gcc文件很多,编译很慢,可以使用make -j N参数,开启多线程编辑。其中N值可以设定为机器CPU核数x2。

编译好了之后就可以使用/opt/gcc-4.6.3/bin/gcc-4.6.3来编译c程序了。为了使用方便,可以将/opt/gcc-4.6.3/bin/gcc-4.6.3/bin放到系统PATH中:

export PATH=$PATH:/opt/gcc-4.6.3/bin/gcc-4.6.3/bin

构建arm-linux-gnueabi-gcc-4.6.3交叉编译链

准备工作

1、准备文件

binutils-2.22.tar.bz2

gcc-4.6.3.tar.bz2

glibc-2.14.1.tar.xz

glibc-ports-2.14.1.tar.gz

glibc-linuxthreads-2.5.tar.bz2

gdb-7.4.1.tar.bz2

Linux-2.6.38.8.tar.bz2

mpfr-3.1.1.tar.bz2

mpc-1.0.1.tar.gz

gmp-5.1.0.tar.bz2

2、建立以下变量,方便稍候的输入

$ vim ~/.bashrc

export TARGET=arm-linux-gnueabi

export PREFIX=/usr/local/arm-linux-gcc/4.6.3

export TARGET_PREFIX=$PREFIX/$TARGET

export PATH=$PATH:$PREFIX/bin

3、为宿主机安装mpfr、mpc、gmp

$ tar -xvf gmp-5.1.0.tar.bz2

$ cd gmp-5.1.0

$ mkdir build

$ cd build

$ ../configure

$ make all -j4

$ make install

$ tar -xvf mpfr-3.1.1.tar.bz2

$ cd mpfr-3.1.1

$ mkdir build

$ cd build

$ ../configure

$ make all -j4

$ make install

$ tar -xvf mpc-1.0.1.tar.gz

$ cd mpc-1.0.1

$ mkdir build

$ cd build

$ ../configure

$ make all -j4

$ make install

4、复制linux-kernel-headers

$ tar -xvf linux-2.6.38.8.tar.bz2

$ cd linux-2.6.38.8

$ make include/linux/version.h

# CHK include/linux/version.h

# UPD include/linux/version.h

$ mkdir -p $TARGET_PREFIX/include

$ cp -r ./include/linux/ $TARGET_PREFIX/include

$ cp -r ./include/asm-generic/ $TARGET_PREFIX/include

$ cp -r ./arch/arm/include/asm/ $TARGET_PREFIX/include

二、编译binutils

$ tar -xvf binutils-2.22.tar.bz2

$ cd binutils-2.22

$ mkdir build

$ cd build

$ ../configure --prefix=$PREFIX --target=$TARGET

$ make all -j4

$ make install

三、初步编译gcc(不带glibc支持)

$ tar -xvf gcc-4.6.3.tar.bz2

重新解压mpfr-3.1.1.tar.bz2、mpc-1.0.1.tar.gz、gmp-5.1.0.tar.bz2,并改名复制至gcc-4.6.3中

$ rm -rf mpfr-3.1.1 mpc-1.0.1 gmp-5.1.0

$ tar -xvf gmp-5.1.0.tar.bz2

$ mv gmp-5.1.0 gmp

$ mv ./gmp ./gcc-4.6.3

$ tar -xvf mpfr-3.1.1.tar.bz2

$ mv mpfr-3.1.1 mpfr

$ mv ./mpfr ./gcc-4.6.3

$ tar -xvf mpc-1.0.1.tar.gz

$ mv mpc-1.0.1 mpc

$ mv ./mpc ./gcc-4.6.3

$ cd gcc-4.6.3

$ mkdir build

$ cd build

$ ../configure --prefix=$PREFIX --target=$TARGET --without-headers --enable-languages=c --disable-threads --with-newlib --disable-shared --disable-libmudflap --disable-libssp --disable-decimal-float

$ make all-gcc -j4

$ make install-gcc

$ make all-target-libgcc -j4

$ make install-target-libgcc

四、编译glibc

$ tar -xvf glibc-2.14.1.tar.xz

$ tar -xvf glibc-ports-2.14.1.tar.gz

$ mv glibc-ports-2.14.1 ports

$ mv ./ports/ ./glibc-2.14.1

$ tar -xvf glibc-linuxthreads-2.5.tar.bz2 --directory=./glibc-2.14.1

$ cd glibc-2.14.1

$ mkdir build

$ cd build

$ CC=$TARGET-gcc

$ ln -s /usr/local/arm-linux-gcc/4.6.3/lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a /usr/local/arm-linux-gcc/4.6.3/lib/gcc/arm-linux-gnueabi/4.6.3/libgcc_eh.a

创建config.cache配置文件

$ vim config.cache

libc_cv_forced_unwind=yes

libc_cv_c_cleanup=yes

libc_cv_arm_tls=yes

$ ../configure --host=$TARGET --target=$TARGET --prefix=$TARGET_PREFIX --enable-add-ons --disable-profile --cache-file=config.cache --with-binutils=$PREFIX/bin --with-headers=$TARGET_PREFIX/include

$ make all -j4

$ make install

五、重新编译gcc

$ cd gcc-4.6.3/build/

$ rm -rf *

$ ../configure --prefix=$PREFIX --target=$TARGET --enable-shared --enable-languages=c,c++

$ make all -j4

$ make install

六、编译gdb

$ tar -xvf gdb-7.4.1.tar.bz2

$ ../configure --prefix=$PREFIX --target=$TARGET

$ make all -j4

$ make install

七、创建链接

$ cd $PREFIX/bin

$ ln -s arm-linux-gnueabi-addr2line arm-linux-addr2line

$ ln -s arm-linux-gnueabi-ar arm-linux-ar

$ ln -s arm-linux-gnueabi-as arm-linux-as

$ ln -s arm-linux-gnueabi-c++ arm-linux-c++

$ ln -s arm-linux-gnueabi-C++filt arm-linux-c++filt

$ ln -s arm-linux-gnueabi-cpp arm-linux-cpp

$ ln -s arm-linux-gnueabi-elfedit arm-linux-elfedit

$ ln -s arm-linux-gnueabi-g++ arm-linux-g++

$ ln -s arm-linux-gnueabi-gcc arm-linux-gcc

$ ln -s arm-linux-gnueabi-gcc-4.6.3 arm-linux-gcc-4.6.3

$ ln -s arm-linux-gnueabi-gcov arm-linux-gcov

$ ln -s arm-linux-gnueabi-gdb arm-linux-gdb

$ ln -s arm-linux-gnueabi-gdbtui arm-linux-gdbtui

$ ln -s arm-linux-gnueabi-gprof arm-linux-gprof

$ ln -s arm-linux-gnueabi-ld arm-linux-ld

$ ln -s arm-linux-gnueabi-ld.bfd arm-linux-ld.bfd

$ ln -s arm-linux-gnueabi-nm arm-linux-nm

$ ln -s arm-linux-gnueabi-objcopy arm-linux-objcopy

$ ln -s arm-linux-gnueabi-objdump arm-linux-objdump

$ ln -s arm-linux-gnueabi-ranlib arm-linux-ranlib

$ ln -s arm-linux-gnueabi-readelf arm-linux-readelf

$ ln -s arm-linux-gnueabi-run arm-linux-run

$ ln -s arm-linux-gnueabi-size arm-linux-size

$ ln -s arm-linux-gnueabi-strings arm-linux-strings

$ ln -s arm-linux-gnueabi-strip arm-linux-strip

最近想用gcc来dump一些信息出来,比如说文件依赖关系,ast。google了一下,有两种方法:hack跟plugin。codeviz是通过修改gcc3.4.6来dump出函数调用关系,而VCG是gcc的一个插件,用来可以用来分析控制流图,函数调用图等诸多信息。但gcc是到4.5之后才支持plugin的机制,我机器版本太低,下了gcc4.7.1(各版本的地址http://ftp.gnu.org/gnu/gcc/),根据官方建议,新建一个目录用于编译,因gcc的make里面,没有clean,不过对我们编译其他开源项目同样有用:ls的时候比较干净:)。

下载依赖库:

GNU Multiple Precision Library (GMP) version 4.3.2 (or later)

Necessary to build GCC. If a GMP source distribution is found in a subdirectory of your GCC sources named gmp, it will be built together with GCC. Alternatively, if GMP is already installed but it is not in your library search path, you will have to configure with the --with-gmp configure option. See also --with-gmp-lib and --with-gmp-include.

MPFR Library version 2.4.2 (or later)

Necessary to build GCC. It can be downloaded from http://www.mpfr.org/. If an MPFR source distribution is found in a subdirectory of your GCC sources named mpfr, it will be built together with GCC. Alternatively, if MPFR is already installed but it is not in your default library search path, the --with-mpfr configure option should be used. See also --with-mpfr-lib and --with-mpfr-include.

MPC Library version 0.8.1 (or later)

Necessary to build GCC. It can be downloaded from http://www.multiprecision.org/. If an MPC source distribution is found in a subdirectory of your GCC sources named mpc, it will be built together with GCC. Alternatively, if MPC is already installed but it is not in your default library search path, the --with-mpc configure option should be used. See also --with-mpc-lib and --with-mpc-include.

在ftp://gcc.gnu.org/pub/gcc/infrastructure下载并按上述顺序编译。

设置环境变量LD_LIBRARY_PATH,包含上述3个库下的lib目录(重要!)否则会出现如cannot comput subfix(.o)等问题。

$ ../gcc-4.7.1/configure --prefix=/home/changweiwu/usr --with-gmp=/home/changweiwu/usr/ --with-mpfr=/home/changweiwu/usr --with-mpc=/home/changweiwu/usr/ --enable-languages=c,c++

以上在suse的机器上编译通过,但在ubuntu下会有下述问题,需要进行设置头文件、库文件搜索路径:

ISSUE#1

checking for suitable m4... configure: error: No usable m4 in $PATH or /usr/5bin (see config.log for reasons).

Solution:

$ sudo apt-get install m4

ISSUE#2

In file included from /usr/include/stdio.h:28:0,

from ../../../../gcc-4.7.0/libgcc/../gcc/tsystem.h:88,

from ../../../../gcc-4.7.0/libgcc/libgcc2.c:29:

/usr/include/features.h:324:26: fatal error: bits/predefs.h: No such file or directory

compilation terminated.

make[5]: *** [_muldi3.o] Error 1

Analysis:

Use 'locate bits/predefs.h' to find the path of this header. (in '/usr/include/x86_64-Linux-gnu')

Solution:

#export C_INCLUDE_PATH=/usr/include/i386-linux-gnu && export CPLUS_INCLUDE_PATH=$C_INCLUDE_PATH

ISSUE#3

In file included from /usr/include/features.h:389:0,

from /usr/include/stdio.h:28,

from ../../../../gcc-4.7.0/libgcc/../gcc/tsystem.h:88,

from ../../../../gcc-4.7.0/libgcc/libgcov.c:29:

/usr/include/i386-linux-gnu/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory

compilation terminated.

make[5]: *** [_gcov.o] Error 1

Analysis:

Related to libc multilib, disable it with '--disable-multilib' should work.

Solution:

add '--disable-multilib' and 'configure' again, then run 'make'.

ISSUE#4

/usr/bin/ld: cannot find crti.o: No such file or directory

collect2: error: ld returned 1 exit status

make[3]: *** [libgcc_s.so] Error 1

make[3]: *** Waiting for unfinished jobs....

Analysis:

Use 'locate crti.o' to find this file. (in '/usr/lib/i386-linux-gnu/crti.o') Set LIBRARY_PATH (LDFLAGS)

Solution:

#export LIBRARY_PATH=/usr/lib/i386-linux-gnu

make && make install

arm linux gcc 4.6.3,编译gcc-4.6.3相关推荐

  1. GCC跟NASM联合编译

    GCC跟NASM联合编译 GCC和NASM联合编译 GCC和NASM GCC不用说,C语言的编译器.NASM是一个x86的汇编器,用来编译汇编的.最近在研究GCC和NASM联合编译,为什么要研究二者的 ...

  2. 4G模块SIMCOM7100 LTE在ARM Linux下使用PPPD上网

    尝试了网上其他人的方法,没有成功,最终自己看文档搞定了,希望写下来方便其他人,节省时间. 材料 4G硬件: SIM7100-PCIE-EVB_V1.01 HostPC: Linux hexiongju ...

  3. arm linux gcc fpic,【待整理】Gcc中编译和链接选项 -fpic -fPIC -fpie -fPIE -pie的含义

    [待整理]Gcc中编译和链接选项 -fpic -fPIC -fpie -fPIE -pie的含义 -fpic Generate position-independent code (PIC) suit ...

  4. Ubuntu12.4 64位 安装 arm linux gcc 4.3.2

    一.下载arm linux gcc 4.3.2 http://pan.baidu.com/share/link?shareid=1575352696&uk=2754759285&fid ...

  5. linux gcc 静态编译,GCC 程序编译的静态链接和动态链接

    (给Linux爱好者加星标,提升Linux技能)转自:Mr_Bluyee 在链接阶段中,所有对应于源文件的 .o 文件.'-l' 选项指定的库文件.无法识别的文件名(包括指定的.o目标文件和.a库文件 ...

  6. vxworks gcc linux,针对VxWorks的GCC交叉编译器无法编译C++

    我试图移植Linux库以在VxWorks上运行.我已经成功构建了binutils和gcc,目标为i486-wrs-vxworks,我可以成功构建一个简单的C程序.但是,当我尝试编译C++时,事情就会中 ...

  7. yum arm linux gcc 4.8,Linux-使用 yum 升级 gcc 到 4.8

    wget http://people.centos.org/tru/devtools-2/devtools-2.repo mv devtools-2.repo /etc/yum.repos.d yum ...

  8. Linux GCC简明教程(使用GCC编译C语言程序)

    文章目录 Gedit 编辑器 GCC 编译器 1) 生成可执行程序 2) 运行可执行程序 完整的演示 分步骤编译 1) 编译(Compile) 2) 链接(Link) 市面上常见的 Linux 都是发 ...

  9. linux下编译GCC

    分两种情况:  先看这篇转过来的文章,俺老孙懒得写了.  Linux软件安装通用思路  在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种:  1)一种是软件的源代码,您需要自己动手编译 ...

最新文章

  1. 知识蒸馏:如何用一个神经网络训练另一个神经网络
  2. 使用selector修改TextView中字体的颜色
  3. 本是同根生,相煎何太急?
  4. HDU 5306 Gorgeous Sequence
  5. Python命名空间
  6. 【字符串】最长回文子串 ( 动态规划算法 ) ★
  7. python ctypes实现api测试_Python与C之间的相互调用(Python C API及Python ctypes库)
  8. addShutdownHook钩子
  9. 基于升序链表的定时器
  10. html上拉下拉查看文字内容,html5上拉下拉事件效果演示
  11. senchaTouch 给组件传参的两种方式
  12. 【二分】【中等难度】noip模拟赛 聪哥的工资
  13. Python——获取CPU的线程数量
  14. 电脑c盘怎么清理_电脑C盘内存不足?三分钟教你彻底清理C盘空间,瞬间多出10个G...
  15. React Native开发之IDE(Atom+Nuclide)安装,运行,调试
  16. idea 生成自己项目 API (跟jdk api 一样的界面) 香吧
  17. xml 解析库 msxml6.dll
  18. 看完 2021 CSS 年度报告,才知道 CSS 发展这么快
  19. 牛顿?不不不,是牛逼顿
  20. BI技巧丨近两年及当年月份数据汇总

热门文章

  1. hql删除mysql语句_mysql-使用Hibernate @SQLDelete对所有实体进行软删除
  2. mysql本周函数_MySQL的YEARWEEK函数以及查询本周数据_MySQL
  3. 多线程下获取随机数的王者-ThreadLocalRandom
  4. Dockerfile文件全面详解
  5. MAC OS下使用OpenSSL生成私钥和公钥的方法
  6. sql中还在傻傻的手动添加创建人、创建时间?高级开发工程师不得不知的一个通用技巧!
  7. php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法
  8. ajax异步后台存放购物车表,jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)...
  9. linux校园网客户端,Ubuntu Linux环境下校园网客户端安装使用
  10. Linux大神必会操作——系统排错