交叉编译链

交叉编译是什么?

一般我们的编译是本地编译,例如我们在本地编译一个c程序后,生成一个可执行文件,而这个文件可以在我们本地执行,那么我们说这个编译器运行的平台和程序运行的平台相同。

而交叉编译就好理解了,他是指在一个平台上编译,但是程序要运行于另外一个平台。

那么为什么需要这个平台呢?

很简单,当我们要运行的平台他的硬件设施能力有限的时候,就需要借助别的硬件设施更好的平台把除了运行之外的操作干完,所以就需要在别的平台编译,最终在目标平台运行,这种一般用于嵌入式的设备。

交叉编译和本地编译流程上的不同?

复制代码
源代码 → 预处理 → 编译 → 汇编 → 链接 → 可执行文件

步骤上和本地编译一样,但是在预处理过程中需要连接目标平台的头文件,在链接过程中需要链接的是目标平台的库,在编译和汇编的时候,要生成的目标平台的汇编语言和目标文件。总之一切和目标平台挂钩,只是把当前编译平台当作了一个工具。

编译工具链包含那些组件:

工具 全称/别名 作用 使用场景
ar.exe Archive 创建、修改、提取静态库(.a 文件) 打包多个 .o 文件成静态库
as.exe Assembler 汇编器,将汇编代码(.s)转换为目标文件(.o) 编译汇编语言文件
ld.bfd.exe Linker (BFD版) GNU 链接器的一个变体,使用 BFD 库 链接目标文件成可执行文件
ld.exe Linker 标准 GNU 链接器,合并目标文件和库 生成最终的可执行文件(ELF/EXE)
nm.exe Name List 列出目标文件中的符号表(函数名、变量名) 查看库或可执行文件导出了哪些符号
objcopy.exe Object Copy 复制和转换目标文件格式 ELF → bin/hex,或去除调试信息
objdump.exe Object Dump 显示目标文件详细信息 反汇编、查看段信息、查看符号表
ranlib.exe Random Archive 为静态库(.a)生成索引,加快链接速度 ar 打包后运行,相当于 ar -s
readelf.exe Read ELF 显示 ELF 格式文件的信息 查看可执行文件头、段、节等信息
strip.exe Strip 去除目标文件中的符号表和调试信息 减小可执行文件体积

在流程中的使用:

复制代码
源代码 (.c/.cpp)
    ↓
[编译器 gcc/clang]  ← 这个工具不在你的列表中,是另一个组件
    ↓
汇编代码 (.s)
    ↓
[as.exe]  ← 汇编器
    ↓
目标文件 (.o)
    ↓
[ar.exe] + [ranlib.exe]  ← 可选:打包成静态库 (.a)
    ↓
[ld.exe] 或 [ld.bfd.exe]  ← 链接器
    ↓
可执行文件 (ELF/EXE)
    ↓
[objcopy.exe]  ← 格式转换(如生成 .bin)
[strip.exe]    ← 去除符号(优化体积)
[objdump.exe]  ← 反汇编查看
[nm.exe]       ← 查看符号
[readelf.exe]  ← 查看 ELF 结构
相关推荐
mengpp_1234561 小时前
城市排水泵站物联网监控系统:智能值守,革新市政运维模式
物联网·智慧城市·iot
芯岭技术4 小时前
XL2417D无线透传模组,让用户快速接入多种物联网与智能控制应用
物联网
longxingiot6 小时前
轻量化单片机数传终端降低物联网开发门槛
单片机·嵌入式硬件·物联网
发量惊人的中年网工9 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
李永奉10 小时前
中科蓝讯SDK开发-开启串口Debug打印调试教程
单片机·嵌入式硬件·mcu·物联网·电脑
00后程序员张10 小时前
iOS加固技术路线全面解析:Bitcode模式、源码模式与汇编模式对比及爱加密优势
android·汇编·ios·小程序·uni-app·cocoa·iphone
longxingiot11 小时前
物联网网关助力智慧管廊数字化管控
物联网
zcmodeltech11 小时前
智慧农业沙盘模型物联网控制系统设计:基于STM32与Modbus RTU的传感器-执行器闭环方案
服务器·分布式·stm32·嵌入式硬件·物联网·能源
想你依然心痛11 小时前
HarmonyOS 5.0智慧农业开发实战:构建分布式农业物联网与区块链农产品溯源系统
人工智能·分布式·物联网·区块链·智慧农业·harmonyos·开发实战
2603_954708311 天前
什么是微能网?新型电力系统下园区能源转型新范式
大数据·人工智能·物联网·能源