gcc4.5.1交叉编译器构建过程
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/cnsword/article/details/6118624
1. 下载地址:
下载内容:gcc,binutils,glibc
2. 步骤:
1. binutils
2. 最⼩化交叉编译gcc
3. linux kernel headers
4. glibc
5. 最终版gcc
3. 由于binutils最新版的(2.21)需要mpc、gmp和mpfr,他们是数学计算库,但是不需要交叉编译,所以直接安装x86的就⾏。
binutils的configure参数只需要设置target为arm-linux就可以,其他禁⽤选项没有必要
4. 最⼩化编译gcc时需要去除对宿主机lib的依赖,禁⽤shared、threads。另外还须禁⽤libmudflap、multilib、libssp、libgomp、libiberty(除第⼀个选项外
都是在arm编译条件⽆法通过的选项),
configure参数设置为:--target=arm-none-linux-gnueabi --disable-shared --disable-threads --without-heades --disable-libmudflap --enable-languages=c --disable-libmudflap --disable-multilib --disable-libssp --disable-libgomp
先make all-gcc install-gcc之后make all-target-libgcc install-target-libgcc。因为libgcc对gcc的依赖需要先安装好gcc再编译libgcc。
5. linux kernel的存放位置⼀般为/usr/src/kernel⽬录下,fedora和archlinux(似乎只有x86的)都默认带了。如果没有可以去下载,复制到
include⽬录下或者在glibc编译是添加headers路径。
6. glibc的nptl的pthread需要检测unwind,c cleanup handling,gnu89 line可能没有,将相应的configure检测内容强制为成功。
gnu89 line选项如果在configure时没有设置可能会通过,但是make时会出错。CFLAGS += -fno-stack-protector也可以添加gnu89-line选项
因为没有config-name.h⽂件,⾃⼰根据uname -a的结果建⽴⼀个。
manmul的makefile⽂件有点⼩问题,把提⽰错误的隐含规则⾏单独出来处理。
为lowlevellock.h添加
将elf的makefile⽂件的关于_begin的sed语句的0替换为.
sysdeps/arm/fpu/setjmp.S⽂件末尾添加hidden_def(__sigsetjmp)
编译*arm版本时需要glibc的附加库glibc-prots,下载后解压缩放到sysdeps⽬录glibc⽬录下就可以,也许会需要--enable-add-on来启动特性。
7. 编译最终版gcc
configure参数设置为:--target=arm-none-linux-gnueabi --enable-shared --enable-threads --enable-nls --enable-languages=c,c++
关于nls的⽀持,禁⽤与不禁⽤似乎没有什么差别,⼀般都会禁⽤。
注:
斜体的⼀般是必须要做的,其他的可能根据环境不同有所差别。
linux下gcc编译的四个步骤
问题⼀般会出在glibc的编译过程,其他都还⽐较顺利。
arm-none-linux-gnueabi与arm-linux区别是否提供eabi⽀持,针对于mini6410开发板提供的系统是需要eabi⽀持的否则会报段错误。install_root起作⽤的有:glibc
with-sysroot起作⽤的有:gcc,glibc
binutils在configure的prefix写全部路径/sysroot/usr;install_root不起作⽤

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。