GCC命令:
格式:gcc -[命令选项] 文件名(这里指需要编译的文件名)
一个C语言程序需要经过这几个过程才能进行一个可以执行的文件
例如hello.c这个源文件
Hello.c——> hello.i——>hello.s——>hello.o——>hello
-E -S -C
将一个汇编文件编译成一个可以烧写到开发板中二进制文件的步骤
(1)执行命令arm-linux-gcc -c -g XXX.S (注意最后的扩展名是大写)
(2)执行命令arm-linux-gcc -T XXX.lds -o XXX.elf XXX.o
(3)执行命令arm-linux-objcopy -O binary XXX.elf XXX.bin (注意第一命令选项是大写的O)
编译工具链:
arm-linux-gcc
例子:arm-linux-gcc -g -c led.S
注释:-g -c 将只编译不连接,编译后将产生一个led.o的文件
arm-linux-ld
例子:arm-linux-ld -Tled.lds -o led.elf led.o
注释:-T 后接脚本文件,生成.elf 格式的文件 最后面接文件需要连接的 所有.o 格式的文件
arm-linux-readelf
例子:arm-linux-readelf -a led.elf
注释:用于读取.elf文件的所有信息
例子:arm-linux-readelf -d hello
注释:用于读取编译成功的文件需要哪些库的信息
arm-linux-objdump
例子:arm-linux-objdump -D -S hello
注释:用于将一个已经编译好的文件进行反汇编
例子:arm-linux-objdump -D-S hello >dump
注释:将一个编译好的可执行hello文件进行反汇编, >用于反汇编后文件过大将反汇编文件保存在一个叫dump的文件中。
但是这样的反汇编代码不易阅读,做如下改进:
(1)arm-linux-gcc -g helo.c -o hello
注释:-g 表示调试编译
(2)arm-linux-objdump -D-S hello >dump
注释:将一个调试编译的文件反汇编后保存在文件dump中。这样的反汇编文件易于阅读
arm-linux-objcopy -O binary led.elf -o led.bin
注释:直接用gcc编译的出来的文件是一个.elf格式的文件,只能运行与linux平台,因为linux中有一个elf解释器。将其解释成可以执行的文件。所以需要将其装换成二进制文件。-O binary 表示将其转换成二进制文件后跟需要转换的文件
以上过程过于复杂:
Make命令可以直接将以上三个过程一步执行