ARM GCC常见用法

ARM GCC常见用法

GCC是GNU的编译器套件(GNU Compiler Collection),在执行编译工作是,需要一下4步:

  • 预处理器将源文件预处理后变为 .i 的文件
  • 编译器将预处理后的 .i 文件转换成汇编文件( .s文件)
  • 汇编器将汇编文件转换为可重定位的目标文件( .o文件 )
  • 链接器将各个可重定位的目标文件链接生成为可执行的目标文件( .elf 文件)

参数介绍

  • -S

只激活预处理器和编译器,将源文件编译成汇编代码

  • -c

只激活预处理器,编译器和汇编器,将源文件变为可重定位的目标文件

  • -o

指定输出文件的名字,GCC默认编译出的文件名为a.out

  • -include filename

包含其它文件,相当于在代码中使用 #include <filename>

  • -M

生成文件关联信息

  • -llibary

指定编译时使用的库,例 gcc -lcurses hello.c

  • -Ldir

指定编译时,搜索库的路径,不然仅在标准库的目录里找,dir即目录名称

  • -O0,-O1,-O2,-O3

编译器优化的4个级别

  • -g

指定编译器在编译时产生调试信息

  • -static

禁止使用动态库

  • -share

尽量使用动态库,生成出的文件更小,但须要对应系统具有动态库

使用举例

  • 对源文件仅进行预处理操作
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
  • 将源文件编译成可执行的目标文件(.elf)
arm-none-eabi-gcc -march=armv7-m -specs=nosys.specs main.c -o main
  • 将汇编代码编译成可执行的目标文件(.elf)
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为链接脚本
  • 多个可重载目标文件生成map文件
arm-none-eabi-ld -T script.ld test1.o test2.o -Map test.map
  • 读取可执行目标文件(.elf)中的程序bin文件
arm-none-eabi-objcopy -O binary test.elf test.bin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值