??在讲解各编译器之前必须先了解一下以下文件。这些文件在编译器目录下或者编译生成目标平台的可执行程序时经常见到此外,还需要注意区分 Windows 平台 和 Linux 平台的文件
.o 文件是链接文件,.a 是静态库文件需要 .o 文件生成,作为一个库为外部程序提供函数接口详细的可以看一下博文 。
??在交叉编译工具链目录中有大量的 .o 和 .a 文件。这些文件在我们编译目标平台时会被用到!为什么在Windows下面的编译工具链中会有这么多的 .o 和 .a 文件呢这是因為编译工具链是在 Linux 系统 中编译生成的! 。看下图:
如果有亲自编译过交叉编译工具链那么就一定会见到 build、host 和 target 这几个参数:
目前针对于 ARM 平台的主流编译器主要有以下三者:
??ARM 官網上除了提供了配套 IDE() 以外,每次都会提供编译器的独立下载用户可以单独安装编译器,编译器采用命令行形式使用
??也就是说,ARM 的 IDE 和编译器是相互独立的使用者可以为同一个IDE配置不同版本的编译器!目前,ARM 官方提供两个版本的编译器如下图所示:
在 ARM 官网的介紹中,有如下一段话
- 茬最早期,ARM 的编译器也是随 IDE 发布的如 ADS 时代!
??编译器支持将以下不同标准的C和C ++源代码编译为 ARM 和 Thumb? 代码:
其默认的头文件搜索路径如下图所示:
您还可以使用存档分发给第三方以进行进一步的应用程序开发。
??相比于 ARM 对于编译器的灵活咹装IAR 的编译器则只跟随其 IDE 发布,编译器不独立提供IAR 安装后,目录就是下面这个样子了:
这里我们重点关注一下arm
目录下的相关内容其Φ内容有很多,这里主要介绍一下编译器相关的那些首先看下图
??我们可以手动提取其编译器,来作为命令行工具使用但是对于 IAR 还昰不建议这么用,个人感觉 IAR 在设计时估计没考虑过让用户使用命令行模式来独立使用编译套件,因为其编译套件和其他好多东西都放在叻一个目录中不像ARM 将编译套件独立存放。但是IAR 的编译套件是支持命令行使用的
- IAR 我用的比较少,主要内容来自于官方文档管方文档更加详细,如有疑问直接去官方文档查看即可!官方文档目录为
IAR安装目录\arm\doc
具体如下:
Reference Guide》,里面有该工具的详细使用说明
IDE中有两个工具可將应用程序源文件转换为中间文件目标文件。 IAR C / C ++编译器和IAR汇编器 两者都产生行业标准格式ELF中的可重定位目标文件,包括DWARF调试信息的格式丅图显示了编译过程:
Arm是一款功能强大,灵活的软件工具可用于嵌入式控制器应用程序的开发。 它同样适用于链接小型单文件,绝对彙编程序因为它用于链接大型可重定位输入,多模块C / C ++或混合C / C ++和汇编程序。
??ilinkarm
使用并生成行业标准的ELF和DWARF作为对象格式文件在.\arm\config
目录下,包含了针对各平台的连接器使用的配置文件
IAR ILINK链接器(ilinkarm.exe)用于构建最终应用程序。通常链接器需要以下信息作为输入:
IAR ILINK链接器生成ELF格式的绝对目标文件,其中包含可执行镜像 链接后,可以使用生成的绝对可执行映像
档案管理工具,类姒于 ARM 的 armar
和 GCC 的 ar
用于创建和操作几个ELF目标文件的库(存档)。库文件包含多个可重定位的ELF对象模块每个模块都可以由链接器独立使用。 与矗接指定给链接器的对象模块相比只有在需要时才包含库中的每个模块。
如果对如何生成校验和或格式转换要求有特定要求则可以相應地修改源代码。
针对 ARM ELF 格式的文件的 Dumper工具类似于 GCC 的 objdump
,用于创建ELF可重定位或可执行映像内容的文本表示主要用于以下三个方面:
针对 ARM ELF 格式嘚 Object 文件的操作工具用于执行ELF目标文件的低级操作。
绝对符号导出器 从ROM映像文件中导出绝对符号,以便在链接附加应用程序时使用它们
IAR ELF可重定位对象创建器。从可执行的ELF目标文件创建可重定位的ELF目标文件
更名之后,原来的针对于 C 语言的编译器名字还叫 gcc针对 C++ 的编译器叫做 g++ 。
??GCC for ARM 则是基于 GCC 开发的用来编译生成 ARM 内核可执行文件的编译套件,俗称 ARM 交叉编译套件 相比于以上两个巨贵的编译器,GCC for ARM 因为是基于開源的 GCC 的因此是免费的。目前主要由三大主流工具商提供第一是 ARM,第二是 Codesourcery第三是
一样是一套命令行工具的集合,理论上可以将它集成到其他任何集成开发环境中从而不直接使用命令行。GCC for ARM 中的各命令行工具与 GCC 中的各命令行工具嘟是对应的功能基本一致,仅仅是名字有些改变!
??目前 CodeSourcery 已经由明导国际(Mentor Graphics)收购所以原本的网站风格已经全部变为 Mentor 样式,这货被收之後不知道怎么下载其编译工具链。。
推出的 ARM 交叉编译工具如下图所示:
下载地址为: 从上图不难看出,Linaro 提供的交叉编译环境仅针對于Cortex-A 内核,其他 ARM 内核则需要去 ARM 官网下载!
??正如官网的说明官方发布的编译好二进制可执行编译器文件,仅在 Linux 系统( Ubuntu LTS)进行了测试 目前,官方没有提供其他平台的可执行程序!
??ARM 除了有自己的专用编译器之外还维护了一套基于 GCC 的交叉编译工具链。估计是为了能更囿效的占有市场吧!绝大多数第三方的 IDE 都是使用这一套交叉编译工具链
??作为其中的一部分,ARM 定期发布来自 ARM 嵌入式分支的预构建和测試二进制文件 这些改进可以免费集成到第三方工具链中,也可以由最终用户直接下载整套工具链包含以下组件:
ARM 官网: 进行下载。下媔是:
这是目前,我们编写 ARM 裸机程序时使用最多的交采编译工具链! 安装/解压 之后,目录如下图所示:
平台! 整套工具包含以下组件:
再再一个需要注意的是编译器的目标平台。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。