linux cross tool

来源:互联网 发布:社交网络的好处 编辑:程序博客网 时间:2024/05/16 12:40

工欲善其事必先利其器,做嵌入式的开发编译器的重要性不容置疑。当你买到一块开发板时,往往在资料光盘中硬件商会提供相应的编译器,或者从网络也能获得成熟的交叉编译器,这都是比较方便的途径。的确在当前自己去做一个交叉编译器已经不是一个十分必要的事情了,特别是在有了crosstool这个工具之后一切变得很容易。自己制作纯属兴趣。最早听说这个工具是从刘淼的书中,关于crosstool网上有很多介绍的文章,也可以到crosstool的官方网站上去看http://kegel.com/crosstool/,感谢Dan Kegel让这一切变的如此简单。这里以制作arm的交叉编译工具为例做一下介绍。

 

1、在这个地方获得最新的crosstools:http://kegel.com/crosstool/crosstool-0.43.tar.gz

 

2、查看demo-arm.sh内容。TARBALLS_DIR是指生成交叉编译器所需要的压缩包所在位置(关于所需要的压缩包和你要生成的编译器的版本有关);RESULT_TOP是生成的交叉编译器存放的位置;此脚本生成的编译器版本是gcc-4.1.0-glibc-2.3.2-tls#!/bin/sh# This script has one line for each known working toolchain# for this architecture. Uncomment the one you want.# Generated by generate-demo.pl from buildlogs/all.dats.txtset -exTARBALLS_DIR=$HOME/downloadsRESULT_TOP=/opt/crosstoolexport TARBALLS_DIR RESULT_TOPGCC_LANGUAGES="c,c++"export GCC_LANGUAGES# Really, you should do the mkdir before running this,# and chown /opt/crosstool to yourself so you don't need to run as root.mkdir -p $RESULT_TOP

#eval `cat arm.dat gcc-2.95.3-glibc-2.1.3.dat` sh all.sh --notest

#eval `cat arm.dat gcc-2.95.3-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-2.95.3-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.2.3-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.2.3-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.3.6-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.2.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.5-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6.dat` sh all.sh --notest

#eval `cat arm.dat gcc-3.4.5-glibc-2.3.6-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.2-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.5-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.0.2-glibc-2.3.6-tls.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.1.0-glibc-2.2.2.dat` sh all.sh --notest

#eval `cat arm.dat gcc-4.1.0-glibc-2.3.2.dat` sh all.sh --notest

eval `cat arm.dat gcc-4.1.0-glibc-2.3.2-tls.dat` sh all.sh --notestecho Done.

 

3、查看gcc-4.1.0-glibc-2.3.2-tls.datBINUTILS_DIR=binutils-2.16.1GCC_CORE_DIR=gcc-3.3.6GCC_DIR=gcc-4.1.0GLIBC_DIR=glibc-2.3.2LINUX_DIR=linux-2.6.15.4LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2GDB_DIR=gdb-6.5GLIBC_EXTRA_CONFIG="$GLIBC_EXTRA_CONFIG --with-tls --with-__thread --enable-kernel=2.4.18"以上所提到的就是生成交叉编译器所需要的压缩包的版本。4、查看arm.dat,可以更改生成编译器的名称;KERNELCONFIG=`pwd`/arm.configTARGET=arm-unknown-linux-gnuTARGET_CFLAGS="-O"5、在crosstool-0.43目录下执行 demo-arm.sh,就可以自动执行。

 

6、几点说明:

a、此过程需要时间很长,因为需要从网络以wget的方式下载相应的压缩包(本例子150M);

b、可以用其他的下载利器事先下载好所需要的压缩包放到指定位置; c、执行demo-arm.sh不建议使用根用户;

d、需要足够的磁盘空间;

e、编译的过程是个漫长的过程安排好自己的时间,我先用迅雷下载了所需要的压缩包,在1.7G 256M FC5操作系统下用了1小时15分钟;

 

 

以上是我在网上找的文章,但是有个问题,在执行./demo-arm.sh之后不久出现一个问题:

These critical programs are missing or too old: gcc?

configure: error:*** These critical programs are missing or too old: gcc

*** Check the INSTALL file for required versions.

 

后来在网上找到了解决方法:

      将./glibc-2.3.2/glibc-2.3.3-allow-gcc-4.0-configure.patch 中的3.[2-9] *)改为3.[2-9] *|4.*)

      在执行./demo-arm.sh便可。

原创粉丝点击