交叉编译详解

版本:v1.3.0

Crifan Li

摘要

本文主要介绍了什么是交叉编译,为何要有交叉编译;解释了什么是工具链,什么是交叉工具链;详解解释了交叉编译器的名字的命名规则,以及如何获得交叉编译器,制作交叉编译器的各种工具,使用已有的交叉编译器和自己手动编译交叉编译器之间的对比;最后总结了交叉编译方面的心得和注意事项。

[提示] 本文提供多种格式供:
在线阅读 HTML HTMLs PDF CHM TXT RTF WEBHELP
下载(7zip压缩包) HTML HTMLs PDF CHM TXT RTF WEBHELP

HTML版本的在线地址为:

http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html

有任何意见,建议,提交bug等,都欢迎去讨论组发帖讨论:

http://www.crifan.com/bbs/categories/cross_compile/

2015-05-23

修订历史
修订 1.3.0 2015-05-23 crl
  1. 将帖子内容整理过来
  2. 添加了关于交叉编译器命名规则的解释
  3. 添加了使用已有的交叉编译器和自己手动编译交叉编译器之间的对比
  4. 补充完整帖子引用
  5. 添加交叉编译器eldk的下载地址

目录

前言
1. 本文目的
2. 待完成
1. 交叉编译简介
1.1. 什么是交叉编译
1.2. 为何要有交叉编译
2. 交叉工具链简介
2.1. 什么是工具链
2.2. 什么是交叉工具链
3. 交叉编译器简介
3.1. 交叉编译器的名字的命名规则
3.1.1. 交叉编译器名字举例
3.1.2. crosstool-ng中交叉编译前缀的命名规则
3.1.2.1. 交叉编译器名字中的arch部分
3.1.2.1.1. crosstool-ng中arch的值
3.1.2.2. 交叉编译器名字中的vendor部分
3.1.2.2.1. crosstool-ng中vendor的值
3.1.2.3. 交叉编译器名字中的kernel部分
3.1.2.3.1. crosstool-ng中kernel的值
3.1.2.4. 交叉编译器名字中的system部分
3.1.2.4.1. system中的gnu
3.1.2.4.1.1. crosstool-ng中system为gnu的情况
3.1.2.4.2. system中的eabi
3.1.2.4.2.1. crosstool-ng中system为eabi的情况
3.1.2.4.3. system中的uclibc
3.1.2.4.3.1. crosstool-ng中system为uclibc的情况
3.2. 如何得到交叉编译器
3.2.1. 拿来主义:直接去下载和使用别人已经编译好的交叉编译器
3.2.2. 自己动手,丰衣足食:自己去编译出来一套自己想要的交叉编译器
3.2.2.1. 白手起家从头开始制作交叉编译器
3.2.2.2. 借助别人的工具去制作交叉编译器
3.3. 各种制作交叉编译器的工具
3.3.1. crosstool-NG
3.3.2. Buildroot
3.3.3. crosstool
3.3.4. Embedded Linux Development Kit (ELDK)
3.3.5. OpenEmbedded的BitBake
3.3.6. Crossdev
3.3.7. OSELAS.Toolchain()
3.4. 使用已有的交叉编译器和自己手动编译交叉编译器之间的对比
3.4.1. 使用已有交叉编译器的优点
3.4.1.1. 已有的交叉工具链的下载
3.4.1.1.1. ELDK的下载
3.4.2. 使用已有交叉编译器的缺点
3.4.3. 自己手动编译交叉编译器的优点
3.4.4. 自己手动编译交叉编译器的缺点
4. 交叉编译心得和注意事项
4.1. 交叉编译心得和注意事项
参考书目

范例清单

1.1. 在x86平台上编译,在ARM平台上运行
3.1. 举例:交叉编译器中的arch的值
3.2. 举例:交叉编译器中的vendor的值
3.3. 举例:交叉编译器中的kernel的值
3.4. 举例:交叉编译器中的system的值
3.5. 购买了TQ2440的开发板,就送了对应的交叉编译器