2026/2/2 9:51:57
网站建设
项目流程
关于要求建设网站的请示,江阴网站的建设,服务公司名字大全,wordpress显示更新时间Linux交叉编译工具链
前言
Linux交叉编译工具链是在一种计算机架构#xff08;如x86个人电脑#xff09;上#xff0c;编译生成能在另一种不同架构#xff08;如ARM处理器#xff09;上运行代码的整套开发工具。
1. 交叉编译工具链的命名规则
1.1 命名规则
arch[-ven…Linux交叉编译工具链前言Linux交叉编译工具链是在一种计算机架构如x86个人电脑上编译生成能在另一种不同架构如ARM处理器上运行代码的整套开发工具。1. 交叉编译工具链的命名规则1.1 命名规则arch[-vendor][-os][-abi]1.2 详细说明arch (架构): 目标处理器架构如 arm, aarch64mips, riscv, x86_64。vendor (提供商/厂商): 工具链提供商名称。unknown或none表示无厂商os(操作系统): 目标操作系统如linux。none或者不填表示无操作系统(裸机)abi(应用二进制接口): 指定库函数和映像的规范- eabi: 无操作系统(裸机)的嵌入式 ABI- gnu: 使用 glibc 库 oabi (old abi, 旧版 ABI)- gnueabi: 使用 glibc 库 eabi (embedded abi, 嵌入式 ABI)- gnueabihf: 使用 glibc 库 eabi (embedded abi, 嵌入式 ABI)支持硬件浮点 (hard float)- musl: 使用 musl 库 oabi- musleabi: 使用 musl 库 eabi- musleabihf: 使用 musl 库 eabi支持硬件浮点1.3 示例arm-none-eabi无操作系统arm编译器不支持与操作系统有关的函数如forkaarch64-none-linux-gnuLinux系统aarch64编译器2. 交叉编译工具链的组成编译器gcc/g交叉编译器将源代码编译成目标文件Binutils提供二进制文件处理的基础工具集包括链接器ld汇编器as静态库打包工具ar目标文件查看工具readelf去除符号strip等C标准库标准C函数如malloc printf的实现如C标准库函数malloc通过封装系统调用brk和mmap来更便捷的实现用户态内存分配sysroot系统根目录sysroot是目标平台文件系统结构的目录包含了目标设备所需的头文件、库文件、配置文件等开发资源和运行时依赖名称描述典型应用场景GNU C Library (glibc)Linux系统的标准C库。功能最完整、遵循标准最严格、对POSIX和Linux特有API支持最好。但体积最大动态链接依赖较多标准Linux桌面/服务器musl轻量、快速、优雅的C库。专注于静态链接体积极小遵循标准严格。静态链接是其最大优势但某些非标准/历史兼容API支持不如glibc对体积敏感的嵌入式Linux、容器基础镜像、静态编译发行版uClibc-ng为资源极度受限的嵌入式系统设计。高度可配置可裁剪到非常小。更注重“能用”而非严格遵循标准性能与兼容性权衡较多老式路由器、IoT设备、内存/存储极小的Linux系统newlib专为嵌入式“裸机”系统设计。不依赖操作系统需要用户自行实现底层系统调用接口。非常轻量是许多RTOS的默认C库Cortex-M等微控制器程序、无操作系统的嵌入式系统Bionic由Google为Android开发。源自BSD C库但经过大量修改。不完整支持POSIX添加了Android特有API仅用于Android系统及应用开发BSD libc如 FreeBSD/OpenBSD 的libc。是GNU/Linux系统外的一个重要分支代码和质量很高BSD系列操作系统Microsoft C run-time libraryWindows操作系统的C运行库。实现了C标准库和Windows特有的运行时支持。仅用于Windows平台原生程序开发3. 制作交叉编译工具链3.1 crosstool-NGcrosstool-NG专门用于构建交叉编译工具链的自动化配置工具3.2 BuildrootBuildroot官网Buildroot是一个嵌入式Linux构建系统可以构建整个嵌入式系统包括交叉编译器工具链cross-compilation toolchain、根文件系统rootfs、Linux内核和引导加载程序bootloader等3.3 手动构建下载源码手动构建使用kernelgccglibcbinutils的源码包编译。ReferenceBinutils - GNU Project - Free Software FoundationThe GNU C Library - GNU Project - Free Software FoundationCross-compilation toolchains for Linux - Homemusl libc toolchains | static cross/native toolchains