http://www.cnblogs.com/jeffkuang/articles/3791205.html 2014 所谓交叉编译环境,就是在普通的 PC 机编译生成能在目标机(如 ARM )上运行的软件。在 GNU 对工具链的定义中,整个交叉编译工具链应该是 GCC + binutils + glibc 。其中 GCC 又包括了预编译器 cpp 、 C 编译器 gcc 、汇编器 as 和链接器 ld 。 交叉编译工具链的获得方式: ( 1 )从网上下载已经构建好的交叉编译工具链,比如 ARM 的交叉编译工具链可以从ftp://ftp.arm.linux.org.uk/pub/linux/arm/toochain/ 下载。注意这些已经做好了的交叉编译工具链往往规定了安装的路径(因为在编译时就制定了路径 --prefix ),可以查看一下 README 文档,通常的路径是“ /usr/local/arm/x.x.x ”,这时需要将工具包解压到这个路径下。 ( 2 )使用 crosstool 自己构建,下面以构建 ARM 交叉编译工具链为例,说明构建步骤
1. 下载 crosstool-0.43.tar.gz 【 crosstool-0.43.tar.gz 】 http:///crosstool/crosstool-0.43.tar.gz
2. 配置 crosstool-0.43 [leo@ crosstool]$ tar zxvf crosstool-0.43.tar.gz [leo@ crosstool]$ cd crosstool-0.43 [leo @ crosstool-0.43]$ vi demo-arm.sh 修改下面几行,即设置 tarball 的路径、编译结果顶层路径以及需要编译的 gcc 版本。 TARBALLS_DIR=$HOME/Downloads RESULT_TOP=$HOME/crosstool/arm eval `cat arm.dat gcc-4.1.1-glibc-2.3.2.dat` sh all.sh --notest
[leo @ crosstool-0.43]$ vi gcc-4.0.0-glibc-2.3.2.dat BINUTILS_DIR=binutils-2.16.1 GCC_DIR=gcc-4.0.0 GLIBC_DIR=glibc-2.3.2 LINUX_DIR=linux-2.6.15.4 LINUX_SANITIZED_HEADER_DIR=linux-libc-headers-2.6.12.0 GLIBCTHREADS_FILENAME=glibc-linuxthreads-2.3.2 GCC_CORE_DIR=gcc-3.3.6 将以上所需的 tarball 放到 $(TARBALLS_DIR) 目录下面。
[leo @ crosstool-0.43]$ vi arm.dat KERNELCONFIG=`pwd`/arm.config TARGET=arm-linux TARGET_CFLAGS="-O"
[leo @ crosstool-0.43]$ ./demo-arm.sh 系统开始编译, 所有使用到的文件 ( 如果没有预先存放在 $(TARBALLS_DIR) 目录下面 ) ,则会在编译的时候自动下载。编译的时间可能需要几个小时。
【说明】红色部分为修改 / 增加部分 TARBALLS_DIR :是下载的工具源码压缩包的存放目录。 RESULT_TOP :是要生成的工具链的存放目录,要有写权限的目录,不然无法编译。 3. 所需工具源码压缩包的下载地址 【 binutils-2.16.1.tar.bz2 】 http://ftp./gnu/binutils/ 【 gcc-4.0.0.tar.bz2 】 http://ftp./gnu/gcc/gcc-4.0.0/ 【 glibc-2.3.2.tar.bz2 】 http://ftp./gnu/glibc/ 【 linux-2.6.15.4.tar.bz2 】 http://ftp./pub/linux/kernel/v2.6/ 【 glibc-linuxthreads-2.3.2.tar.bz2 】 http://ftp./gnu/glibc/ 【 gcc-3.3.6.tar.bz2 】 http://ftp./gnu/gcc/gcc-3.3.6/ 【 gdb-6.5.tar.bz2 】 http://ftp./gnu/gdb/ 以上就是编译交叉编译工具所用到的源文件组合,这个组合可以成功编译,关于那些组合可以成功编译可以参照http:///crosstool/crosstool-0.43/buildlogs/ 表格。
4. 在 UBUNTU 下编译出现的错误 ( 0 )需要安装 bison 和 flex sudo apt-get install bison flex
( 1 )编译过程中出现一个问题,说是 gcc 版本太旧,其实是 gcc 版本太新了,解决如下: 先查看当前 gcc 的版本 gcc –version ,比如我当前的 gcc 版本 gcc-4.4 sudo apt-get install gcc-3.4 sudo rm /usr/bin/gcc ln -s /usr/bin/gcc-3.4 /usr/bin/gcc 注意编译完成以后要恢复成原来的版本 , 如下: sudo rm /usr/bin/gcc ln -s /usr/bin/gcc-4.3 /usr/bin/gcc 注意:在较新的 UBUNTU 中, sudo apt-get install gcc-3.4 会出现 E: Couldn’t find package gcc-3.4 ,此时需要手动到 http://packages./ 去下载较旧版本的安装包,并自行处理包的依赖关系。
( 2 )出现如: build-glibc/csu/version-info.h:1:1: missing terminating " character 系统在编译生成 version.o 时候发现 version-info.h 文件有错误,解决如下: 解压 glibc-2.3.2.tar.bz2 找到 glibc-2.3.2/csu 目录下的 Makefile 按如下修改: 文件末尾有 2 处 echo echo "\"Compiled on a $$os $$version system" \ "on`date +%Y-%m-%d`.\\n\"" ;; \ 改为: echo "\"Compiled on a $$os $$version system" \ "on `date +%Y-%m-%d`.\\\\n\"" ;; \
echo "\"Available extensions:\\n\""; \ 改为: echo "\"Available extensions: \\\\n\"" \ 保存并重新压缩为 glibc-2.3.2.tar.bz2 覆盖原来 $(TARBALLS_DIR) 目录下的 glibc-2.3.2.tar.bz2 ,转到 crosstool-0.43 目录下从新执行。 |
|
来自: 心不留意外尘 > 《linux dev》