交叉编译工具arm-linux-

本文介绍使用 arm-linux-gcc 进行 C 代码编译的四个阶段:预处理、编译、汇编和链接,并展示了如何通过特定选项进行头文件和库文件的添加。此外还介绍了 arm-linux-ld 和 arm-linux-objcopy 的基本用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.arm-linux-gcc (与gcc区别是平台不同,arm-linux-gcc编译的文件可以在arm上运行,而gcc编译的不能在arm上执行,能在x86上的执行)

编译流程4个步骤 1:预处理 2:编译 3:汇编 4:链接

1:预处理阶段:Gcc把头文件(如stdio.h)编译进来,用-E查看

指令格式:arm-linux-gcc –E hello.c –o hello.i

2:编译阶段:检查代码的规范性,错误等,把代码翻译成汇编语言,用-s查看

指令格式:arm-linux-gcc –s hello.i(hello.c) –o hello.s

3:汇编阶段:把.s文件转换成目标文件,用-c查看

指令格式:arm-linux-gcc –c hello.s(hello.c/hello.i) –o hello.o

4:链接阶段:系统把函数的实现都做到libc.so.6的函数库中。

指令格式:arm-linux-gcc hello.o(hello.c/hello.i/hello.s) –o hello

运行可执行文件: ./hello

添加头文件:-I dir linux头文件默认放到了“/usr/include/”目录下,当用户希望添加放置在其他位置上的头文件时,就要用“-I dir”选项来指定。例如放在hello.h放在“/root/workplace/”

格式:arm-linux-gcc hello.h -I /root/workplace/ -o hello

添加库文件:-L dir linux头文件默认放到了“/usr/lib/”目录下,当用户希望添加放置在其他位置上的库文件时,就要用“-L dir”选项来指定。例如放在hello.h放在“/root/workplace/”

格式:arm-linux-gcc hello.h -L /root/workplace/ -o hello

GCC所支持的后缀名

Gcc编译选项列表



Gcc警告出错选项列表


2.arm-linux-ld

arm-linux-ld用于将多个目标文件、库文件连接成可执行文件。

-T选项是ld命令中比较重要的一个选项,可以用它直接指明代码的代码段、数据段、bbs段,对于复杂的连接,可以专门写一个脚本来告诉编译器如何连接。

-Ttext addr

-Tdata addr

-Tbss addr

arm-linux-ld -Ttext 0x00000000 crt0.o led_on_c.o -o led_on_c_tmp.o

我们看看它是什么意思:-o选项设置输出文件的名字为

led_on_c_tmp.o;“--Ttext 0x00000000”设置代码段的起始地址为0x00000000;这条指令的作用就是将crt0.o和led_on_c.o连接成led_on_c_mp.o可执行文件,此可执行文件的代码段起始地址为0x00000000。

arm-linux-ld -Ttext 0x30000000 -g key_led.o SDRAM.o -o key_led_elf

3.arm-linux-objcopy

把一种目标文件中的内容复制到另一种类型的目标文件中。一般将elf转化成bin 文件加载到内存中运行,bin文件就是一个纯二进制文件

arm-linux-objcopy -O binary -S key_led_elf key_led.bin

4.arm-linux-objdump

显示一个或者更多目标文件的信息。使用选项来控制其显示的信息,它所显示的信息通常只有编写编译工具的人才感兴趣

arm-linux-objdump -D -m arm key_led_elf > key_led.dis


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值