编译工具链(GCC)建立
2015-12-01 13:55
411 查看
编译工具链(GCC)建立
1.资源包下载1)binutils-2.17下载
http://ftp.gnu.org/gnu/
2)gcc-4.1.2、mpfr-2.4.0、gmp-4.2下载
http://ftp.gnu.org/gnu/
3)内核linux-2.6.18下载
https://www.kernel.org/pub/linux/kernel/
4)glibc-2.5下载
http://ftp.gnu.org/gnu/
2.设置编译环境变量
export PRJROOT=${PWD} export TARGET=i486-linux-gnu export PREFIX=${PRJROOT}/tools export TARGET_PREFIX=${PREFIX}/${TARGET} export PATH=${PREFIX}/bin:${PATH}
TARGET:变量用来定义目标板的类型,以后会根据此目标板的类型来建立工具链。参看下面《体系结构和TAEGET变量的对应》。目标板的定义与主机的类型是没有关系的,但是如果更改TARGET的值,GNU工具链必须重新建立一次。
PREFIX:变量提供了指针,指向目标板工具程序将被安装的目录。
TARGET_PREFIX:变量指向与目标板相关的头文件和链接库将被安装的目录。
PATH:变量指向二进制文件(可执行文件)将被安装的目录。如果不惯用环境变量的,可以直接用绝对或相对路径。如果不用环境变量,一般都用绝对路径,相对路径有时会失败。环境变量也可以定义在.bashrc文件中,这样就不用老是export这些变量了。
体系结构和TAEGET变量的对应
体系结构 TARGET变量的值 PowerPC Powerpc-linux ARM arm-linux MIPS(big endian) mips-linux MIPS(little endian) mipsel-linux MIPS64 mips64-linux SuperH3 sh3-linux SuperH4 sh4-linux I3(4,5,6)86 i3(4,5,6)86-linux Ia64 ia64-linux M68k m68k-linux M88k m88k-linux Alpha alpha-linux Sparc sparc-linux Sparc64 sparc64-linux
3.binutils编译
./../configure --target=${TARGET} --prefix=${PREFIX} --enable-werror=no
4.编译gcc(编译静态gcc工具,用于编译glibc)
tar xjf mpfr-2.4.0.tar.bz2 tar xjf gmp-4.2.tar.bz2 mv mpfr-2.4.0 ./gcc-4.1.2/mpfr mv gmp-4.2 ./gcc-4.1.2/gmp ./../configure --target=$TARGET --prefix=$PREFIX --enable-languages=c --disable-threads --disable-shared --disable-libmudflap --disable-libssp --disable-decimal-float
说明:
–disable-libmudflap:不编译边界检查函数的运行时库。(-g -fmudflap -lmudflap)
–disable-libssp:不编译保护缓冲区溢出的运行时库。
–disable-decimal-float:启用或禁用 libdecnumber 库的 C 语言十进制浮点扩展,还可以进一步选择浮点格式(bid是i386与x86_64的默认值|dpd是PowerPC的默认值)。在 PowerPC/i386/x86_64 GNU/Linux 系统默认启用,在其他系统上默认禁用。
5.获得内核linux头文件
tar xjvf linux-2.6.18.tar.bz2 make ARCH=i386 menuconfig make include/linux/version.h mkdir –p $TARGET_PREFIX/include cp linux-2.6.18/include/linux/ ./../../../tools/i486-linux/include/ -r cp linux-2.6.18/include/asm-i386 ./../../../tools/i486-linux/include/asm -r cp linux-2.6.18/include/asm-generic ./../../../tools/i486-linux/include/ -r
6.编译gcc
1)解压
tar xjvf glibc-2.5.tar.bz2
2)新增链接库
cd $PREFIX/lib/gcc/i486-linux/4.1.2 ln -s libgcc.a libgcc_eh.a
3)创建config.cache配置文件
vim config.cache
config.cache配置文件内容如下:
libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes libc_cv_arm_tls=yes
4)修改文件
5)编译glibc
cd glibc-2.5 mkdir x86 CC=i486-linux-gnu-gcc ./../configure --host=$TARGET --target=$TARGET --prefix=$TARGET_PREFIX --enable-add-ons --with-headers=$TARGET_PREFIX/include --cache-file=./../config.cache
Linux线程模型:LinuxThreads 和 NPTL,glibc默认自带NPTL线程库,编译nptl时目标机器要求i486及其以上才可以编译通过。(参考文章:http://www.ibm.com/developerworks/cn/linux/l-threading.html)
7.编译完整gcc(基于glibc)
./../configure --target=$TARGET --enable-languages=c,c++ --prefix=$PREFIX
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝