Yocto项目应用开发:SDK获取、构建与使用全解析
1. GNU工具链与交叉编译工具链概述
GNU工具链是开发中的重要基础,它包含以下组件:
-汇编器(GNU as):属于binutils包的一部分。
-链接器(GNU ld):同样是binutils包的一部分。
-编译器(GNU gcc):最新版本支持C、C++、Java、Ada、Fortran、Go和Objective C/C++。
-调试器(GNU gdb):即GNU调试器。
-二进制文件工具(objdump、nm、objcopy、readelf、strip等):也是binutils包的一部分。
这些组件足以构建裸机应用程序、像U - Boot这样的引导加载程序或像Linux内核这样的操作系统,因为它们不需要C库,并且会实现自身所需的C库函数。但对于Linux用户空间应用程序,需要一个符合POSIX标准的C库。在Yocto项目中,GNU C库glibc是默认使用的C库,而musl作为一个更小的C库,是资源受限设备的流行替代选择。
在嵌入式系统中,我们需要的是交叉编译工具链。这是因为我们在主机计算机上进行构建,但生成的二进制文件要在目标设备上运行,而目标设备通常具有不同的架构。根据构建工具链的机器(构建机器)、运行工具链的机器(主机)和运行工具链构建的二进制文件的机器(目标机器)的架构,存在几种常见的工具链类型:
| 工具链类型 | 描述 | 示例 |