构建arm linux gcc 交叉编译器 (下) gcc v4

前一篇文章介绍了构建arm-linux-gcc3.4.5,现在介绍gcc4版本的构建 以gcc4.2.4 版本为例

1.首先配置linux内核(同前一篇文章)我用了版本binutils-2.18,配置编译同前

2.编译binutils (同前一篇文章) 

3 编译 gcc4.2.4 c编译器

$tar xvjf gcc-4.2.4.tar.bz2

$cd gcc-4.2.4 

$mkdir arm-linux

打上补丁

----------------------------------------------------------------------------------------------------------------

diff -Nur gcc-4.2.4/gcc/config/arm/lib1funcs.asm gcc-4.2.4n/gcc/config/arm/lib1funcs.asm

--- gcc-4.2.4/gcc/config/arm/lib1funcs.asm 2006-01-18 15:39:17.000000000 -0500

+++ gcc-4.2.4n/gcc/config/arm/lib1funcs.asm 2010-06-09 23:02:56.000000000 -0400

@@ -996,8 +996,8 @@

  FUNC_START div0

 

  stmfd sp!, {r1, lr}

- mov r0, #SIGFPE

- bl SYM(raise) __PLT__

+ bl SYM(__div0) __PLT__

+ mov r0, #0

  RETLDM r1

 

  FUNC_END div0

diff -Nur gcc-4.2.4/gcc/config/arm/linux-elf.h gcc-4.2.4n/gcc/config/arm/linux-elf.h

--- gcc-4.2.4/gcc/config/arm/linux-elf.h 2007-09-01 11:28:30.000000000 -0400

+++ gcc-4.2.4n/gcc/config/arm/linux-elf.h 2010-06-09 22:44:54.000000000 -0400

@@ -48,7 +48,7 @@

    %{shared:-lc} /

    %{!shared:%{profile:-lc_p}%{!profile:-lc}}"

 

-#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"

+/*#define LIBGCC_SPEC "%{msoft-float:-lfloat} %{mfloat-abi=soft*:-lfloat} -lgcc"*/

 

 #define GLIBC_DYNAMIC_LINKER "/lib/ld-linux.so.2"

 

diff -Nur gcc-4.2.4/gcc/config/arm/t-linux gcc-4.2.4n/gcc/config/arm/t-linux

--- gcc-4.2.4/gcc/config/arm/t-linux 2004-05-15 08:41:35.000000000 -0400

+++ gcc-4.2.4n/gcc/config/arm/t-linux 2010-06-10 01:47:36.000000000 -0400

@@ -1,15 +1,32 @@

 # Just for these, we omit the frame pointer since it makes such a big

 # difference.  It is then pointless adding debugging.

-TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC

+TARGET_LIBGCC2_CFLAGS = -fomit-frame-pointer -fPIC -Dinhibit_libc -D__gthr_posix

 LIBGCC2_DEBUG_CFLAGS = -g0

 

+ENQUIRE=

 LIB1ASMSRC = arm/lib1funcs.asm

-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx

+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx/

+ _bb_init_func _call_via_rX _interwork_call_via_rX /

+ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi /

+ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 /

+ _fixsfsi _fixunssfsi

 

-# MULTILIB_OPTIONS = mhard-float/msoft-float

-# MULTILIB_DIRNAMES = hard-float soft-float

 

-# EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o

 

-# LIBGCC = stmp-multilib

-# INSTALL_LIBGCC = install-multilib

+MULTILIB_OPTIONS = mlittle-endian/mbig-endian mhard-float/msoft-float

+MULTILIB_DIRNAMES = le be hard-float soft-float

+

+EXTRA_MULTILIB_PARTS = crtbegin.o crtbeginS.o crtend.o crtendS.o crti.o crtn.o crtbeginT.o

+

+LIBGCC = stmp-multilib

+INSTALL_LIBGCC = install-multilib

+T_CFLAGS =  -Dinhibit_libc -D__gthr_posix_h

+

+$(T)crti.o: $(srcdir)/config/arm/crti.asm $(GCC_PASSES)

+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) /

+ -c -o $(T)crti.o -x assembler-with-cpp $(srcdir)/config/arm/crti.asm

+

+$(T)crtn.o: $(srcdir)/config/arm/crtn.asm $(GCC_PASSES)

+ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) /

+ -c -o $(T)crtn.o -x assembler-with-cpp $(srcdir)/config/arm/crtn.asm

+

diff -Nur gcc-4.2.4/libjava/java/net/natInetAddressPosix.cc gcc-4.2.4n/libjava/java/net/natInetAddressPosix.cc

--- gcc-4.2.4/libjava/java/net/natInetAddressPosix.cc 2004-08-14 01:04:52.000000000 -0400

+++ gcc-4.2.4n/libjava/java/net/natInetAddressPosix.cc 2010-06-10 01:51:42.000000000 -0400

@@ -40,7 +40,7 @@

 #endif

 

 #ifndef HAVE_GETHOSTNAME_DECL

-extern "C" int gethostname (char *name, int namelen);

+extern "C" int gethostname (char *name, unsigned int namelen);

 #endif

 

 jbyteArray

----------------------------------------------------------------------------------------------------------
$ ../configure --target=arm-linux --prefix=/usr/local --disable-shared --disable-threads --disable-libmudflap --disable-libssp  --disable-libgomp --enable-languages=c  --with-headers=$KERNEL/include  --with-gnu-as --with-gnu-ld --enable-multilib 
$make 
$make install
4.编译 glibc 使用glibc2.3.6 同前面
5编译gcc c ,c++
打补丁同前面 去掉 gcc/config/arm/t-linux gcc-4.2.4n/gcc/config/arm/t-linux中的
 -Dinhibit_libc
$../configure --target=arm-linux --prefix=/usr/local --disable-shared  --with-gnu-as --with-gnu-ld --enable-multilib --with-headers=$KERNEL/include --enable-languages=c,c++ 
$make
$make install
到此构建arm-linux-gcc 编译器完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值