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