Linux嵌入式交叉编译工具链研究
交叉编译器工具链是由编译器、连接器和解释器组成的综合开发环境。交叉编译器工具链主要由binutils、gcc和Glibc组成。有时候为了还原?libc?考虑到库的大小,可以用别的吗?c?图书馆代替?比如Glibc?uClibc、dietlibc?然后呢。纽利布.交叉编译工具链主要包括目标系统的编译器。Gcc,binutils,目标系统的二进制工具,glibc,目标系统的标准C库,以及?Linux内核头文件。第一步是确定目标平台。每个目标平台都有一个清晰的格式,该信息用于识别在构建过程中要使用的不同工具的正确版本。因此,当在特定的目标机器下运行GCC时,GCC将在目录路径中寻找包含目标规范的应用程序路径。GNU的目标规范格式是CPU-平台-OS。比如构建一个基于ARM平台的交叉工具链,目标平台命名为arm-linux-gnu。
交叉编译工具链的制作方法是逐步编译安装交叉编译工具链所需的库和源代码,最终生成交叉编译工具链。
交叉编译工具链是通过Crosstool脚本工具一次性编译生成的。
直接从网上下载制作的交叉编译工具链(ftp.arm.kernel.org.uk)。
方法1难度相对较大,适合希望深入学习,构建跨工具链的读者。如果只是想使用十字工具链,建议使用方法2或方法3构建十字工具链。方法3的优点就不用说了,简单易行,但同时这种方法也有一些缺点,就是太局限了,因为是别人搭建的,也就是固定不灵活,所以搭建时用的库和编译器版本可能不适合你要编译的程序,使用中可能会出现很多莫名其妙的错误。我建议你谨慎使用这种方法。
方法1:逐步构建交叉编译工具链。
下载所需的源代码包
创建工作目录
建立环境变量
编译并安装Binutils
获取内核头文件?
编译gcc的辅助编译器
编译并生成glibc库
编译并生成一个完整的gcc。
由于问答中篇幅所限,具体步骤我无法细说。感兴趣的同学应该从头开始阅读开源Linux,网址是linuxfromstarget . org。
方法二:用Crosstool构建跨工具链(推荐)Crosstool是一组脚本工具,可以为那些支持glibc的架构构建和测试不同版本的gcc和glibc。也是开源项目,下载地址是kegel dot com/crosstool。用Crosstool搭建一个交叉编译工具链,比上面提到的分步编译要简单方便得多。这种方法推荐给只需要为工作构建交叉编译工具链的你。
运行哪个makeinfo,如果找不到命令,解压texinfo-4.11 . tar . bz2,进入Texinfo-4.11目录,执行。/configure &;& amp制造和销售。& ampMake install完成makeinfo工具的安装。
准备文件:下载需要的资源文件?Linux-2.4.20.tar.gz、比努蒂尔斯-2.19.tar.bz2、gcc-3.3.6.tar.gz、Glibc-2.3.2.tar.gz、glibc-linuxthreads-2.3.2.tar.gz和广发银行-6.5.tar.bz2?。然后把这些工具包文件放到新建的$HOME/downloads目录下,最后把crosstool-0.43.tar.gz解压到$HOME/目录下,就死了。
顺序如下:
#?cd?$HOME/
#?焦油?–xvzf?Crosstool-0.43.tar.gz构建脚本文件
然后你需要构建自己的编译脚本,命名为arm.sh,为了简化arm.sh的编译,找一个最接近的脚本文件demo-arm.sh作为模板,然后把脚本的内容复制到arm.sh来修改arm.sh脚本。具体操作如下:
# cd十字工具-0.43
# cp demo-arm.sh arm.sh
# vi arm.sh
修改后的arm.sh脚本如下:
#!/bin/sh
设置?-前任
TARBALLS_DIR=$HOME/downloads?#?定义工具链源代码的存储位置。
RESULT_TOP=$HOME/arm-bin?#?定义工具链的安装目录
出口?TARBALLS_DIR?结果_顶部
GCC_LANGUAGES="c,c++"#?定义支持c,?c++编程语言/c plus plus
出口?GCC _语言
#?创建/opt/crosstool目录。
mkdir?-p?$RESULT_TOP
#?编译工具链,这需要几个小时才能完成。
eval?猫?arm.dat?gcc-3.3.6-glibc-2.3.2.dat '?嘘?all.sh?- notest
回声?完成了。arm.sh脚本文件中需要注意两个文件,arm-xscale.dat和gcc-3.3.6-glibc-2.3.2.dat,它们是Crosstool的编译配置文件。其中?arm.dat文件的内容如下,主要用于定义配置文件、构建和编译工具链的名称以及编译选项。
KERNELCONFIG='pwd'/arm.config?#?内核配置
TARGET=arm-linux?#?编译的工具链名称
TARGET_CFLAGS="-O"#?编译选项
gcc-3.3.6-glibc-2.3.2.dat文件的内容如下。这个文件主要定义了编译过程中需要的库以及它定义的版本。如果编译过程中发现某些库不存在,Crosstool会自动在相关网站下载。这个工具比较智能,非常有用。
BINUTILS _ DIR = BINUTILS-2.19
GCC_DIR=gcc-3.3.6
GLIBC _目录=glibc-2.3.2
LINUX_DIR=linux-2.6.10-8(根据实际情况填写)
GDB _目录=gdb-6.5执行脚本
准备好Crosstool的脚本文件和配置文件后,开始执行arm.sh脚本编译交叉编译工具。具体执行命令如下:
#?cd?十字工具-0.43
#?。/arm.sh经过几个小时的长时间编译,/opt/crosstool目录下会生成一个新的交叉编译工具,包括以下内容:
arm-linux-addr2line?arm-linux-g++arm-linux-ld?arm-Linux-大小
arm-linux-ararm-linux-gcc?arm-linux-nm?arm-Linux-字符串
arm-Linux-asarm-Linux-gcc-3 . 3 . 6?arm-linux-objcopy?arm-linux-strip
arm-linux-c++?arm-linux-gccbug?arm-linux-objdump?固定嵌入路径
arm-linux-c++filt?arm-linux-gcov?arm-linux-ranlib
arm-linux-cpp?arm-Linux-gpro farm-Linux-readelf添加环境变量,然后将生成的编译器工具链路径添加到环境变量路径,方法是在system /etc/ bashrc文件的末尾添加以下行,并将环境变量添加到bashrc文件。
导出路径=/home/贾冰/gcc-3 . 3 . 6-glibc-2 . 3 . 2/arm-Linux-bin/bin:$ PATH
至此,arm-linux下的交叉编译工具链已经完成,现在可以使用arm-linux-gcc生成测试盒上的程序了!