ARM GCC常见用法
GCC是GNU的编译器套件(GNU Compiler Collection),在执行编译工作是,需要一下4步:
- 预处理器将源文件预处理后变为 .i 的文件
- 编译器将预处理后的 .i 文件转换成汇编文件( .s文件)
- 汇编器将汇编文件转换为可重定位的目标文件( .o文件 )
- 链接器将各个可重定位的目标文件链接生成为可执行的目标文件( .elf 文件)
参数介绍
只激活预处理器和编译器,将源文件编译成汇编代码
只激活预处理器,编译器和汇编器,将源文件变为可重定位的目标文件
指定输出文件的名字,GCC默认编译出的文件名为a.out
包含其它文件,相当于在代码中使用 #include <filename>
生成文件关联信息
指定编译时使用的库,例 gcc -lcurses hello.c
指定编译时,搜索库的路径,不然仅在标准库的目录里找,dir即目录名称
编译器优化的4个级别
指定编译器在编译时产生调试信息
禁止使用动态库
尽量使用动态库,生成出的文件更小,但须要对应系统具有动态库
使用举例
arm-none-eabi-gcc -E main.c -o main.i
arm-none-eabi-gcc -march=armv7-m -S main.c -o main.s
arm-none-eabi-gcc -march=armv7-m -c main.c -o main.o
arm-none-eabi-gcc -march=armv7-m -specs=nosys.specs main.c -o main
arm-none-eabi-as -march=armv7-m main.s -o main
- 由可执行的目标文件(.elf)生成反汇编代码(.dis)
arm-none-eabi-objdump -d main > main.dis
arm-none-eabi-ld -T script.ld test1.o test2.o -o test //其中script.ld为链接脚本
arm-none-eabi-ld -T script.ld test1.o test2.o -Map test.map
arm-none-eabi-objcopy -O binary test.elf test.bin
|