交叉编译学习笔记(一)——交叉编译和交叉工具链

搬运自本人 CSDN 博客:https://blog.csdn.net/ajianyingxiaoqinghan/article/details/70917569


交叉编译学习笔记(一)——交叉编译和交叉工具链

最近看论文看的烦,又重新拾起之前没有完全完成的交叉编译,准备在网上找资料,好好研究一下。

参考链接:
http://blog.csdn.net/zqixiao_09/article/details/51822943
http://blog.csdn.net/shenjianxz/article/details/52130111
http://www.crifan.com/files/doc/docbook/binutils_intro/release/html/binutils_intro.html

一. 交叉编译

了解交叉编译之前,首先要介绍本地编译,才能进一步对比本地编译与交叉编译的区别。

1. 本地编译

我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来程序,可以运行的程序(或者库文件),其可以直接在当前的环境,即x86的CPU下,当前电脑中,运行。
此时的编译叫做<font color=#ff0000>本地编译</font>,即编译出来的程序是由当前目标平台编译出的,且只是放到当前平台下运行。

2. 交叉编译

交叉编译是和本地编译相对应的概念。交叉编译是指在当前平台下编译出在<font color=#ff0000>其他平台下运行的程序</font>,即编译出来的程序运行环境与编译它的环境不一样,所以称为交叉编译(Cross Compile)。

3. 交叉编译的意义

交叉编译的概念一般用于嵌入式系统开发。
使用交叉编译的主要原因,是嵌入式系统中<font color=#ff0000>配置较低,资源过少</font>,远不及PC的编译效率。
以笔者为例,笔者的毕业设计是把在ARM上运行一个搭建一个小型监控系统,所以就需要在ARM上配置OpenCV。一方面,笔者的ARM是Cortex-A9的四核1.0GHz的芯片(且已经算比较高的配置),但编译速度依旧远远不如笔者的PC机(i7处理器,8核3.6GHz)。如果在ARM上编译OpenCV,编译过程中生成的中间文件可能大于ARM存储容量不说,且编译速度也远不如本地编译。另一方面,PC机的CPU架构是x86型的,ARM的CPU架构是ARM型的,所以这时候就需要用交叉编译器(此处即为ARM的编译器)编译程序代码,然后移植到ARM平台运行。所以这就是交叉编译的意义所在。

二. 交叉工具链

工具链可以被拆分为两部分:工具、链。下面分别对其进行解释:

1. 工具

工具就是用来工作的。此处工作的目的是为了<font color=#ff0000>生成库文件或(可运行)程序</font>。
此处为了将程序代码编译成可执行文件,中间涉及到了编译、链接等其他步骤,过程中依赖很多相关工具,其中最核心的便是编译器(如gcc)、链接器(ld)。此处所谓的工具,就是gcc,ld等与程序编译、链接等操作相关的工具。
达成此目标的工作流程中主要包含了<font color=#ff0000>编译</font>、<font color=#ff0000>链接</font>两个步骤。

(1) 编译

  • 输入对象:程序源码
  • 输出目标:目标文件
  • 工具:编译器
    • 常见编译器:PC上的gcc,ARM上的arm-linux-gcc

(2) 链接

  • 输入对象:库文件(程序运行时依赖的库文件,或者是某个库所依赖的另外一个库文件)
  • 输出目标:
    • 程序的可执行文件
    • 可被其他可执行文件/库文件调用的库文件
  • 工具:链接器(ld)

这里有一个不得不提的二进制工具集——GNU Binutils。
GNU Binutils,即GNU Binary Utilities的简写,是一组二进制工具的集合。主要包含的工具有:

  • ld:链接器,将多个目标文件链接成一个可执行文件/目标库文件
  • as:汇编器,将汇编源代码编译为机器代码
  • ranlib:对静态库的符号索引表进行更新
  • addr2line:将地址转换为行号(一般用于反汇编)
  • ar:用来操作.a档案文件,如创建、修改、提取内容等
  • nm:列出目标文件中的符号
  • objcopy:拷贝并转换文件,可用于不同格式的二进制文件转换
  • objdump:显示目标文件中的信息
  • readelf:显示ELF格式的目标文件信息
  • size:显示目标文件或档案文件的节(section)大小
  • strings:显示文件中可打印字符串信息

其中最重要的工具是ld, as。

关于编译、链接,笔者也写过一篇简析:《程序生成之编译、链接、加载浅析》,关于编译与链接的内容可查阅该博客。

2. 链

链(chain)的意义在于,按照对应的逻辑,将多个工具串联在一起。
工具,即为前面说到的与程序编译、链接相关的gcc等工具;对应的逻辑,指程序本身编译链接的先后顺序。即先编译,后链接,最后进行其他后期处理(如用objcopy操作相应目标文件等)。
如此将程序编译链接相关工具,按照先编译后链接的内在编译逻辑串起来,就成了我们所谓的工具链。

3. 交叉工具链

一般所说的工具链,指的是本地平台自己的工具链。而用于交叉编译的工具链,就是交叉工具链。交叉工具链中,gcc编译器、ld链接器以及其他的相关工具,都是用来跨平台交叉编译的。
交叉工具链与本地工具链类似,也有交叉编译版本的gcc, ld, as等工具,与本地工具链两两对应。交叉工具链中最重要的工具还是编译器gcc,所以我们也经常把交叉工具链简称为交叉编译器,即严格意义上来讲,交叉编译器指的是交叉编译版本的gcc,但为了叫法上的方便,我们平常说的交叉编译,其实指的都是交叉工具链。
例如常用的交叉编译器arm-linux-gcc,其实是一系列交叉编译版本的交叉工具链,其中包含了arm-linux-gcc, arm-linux-ld, arm-linux-as等工具。

总结:

交叉编译,就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序。例如在x86平台下交叉编译出了ARM平台上的程序,虽然两个平台用的都是Linux系统,但编译得到的程序只能在ARM平台下运行,x86平台下不可运行。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容