前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解

makefile初步制作,arm-linux- (gcc/ld/objcopy/objdump)详解

作者头像
呆呆
修改2021-05-27 14:29:59
1.5K0
修改2021-05-27 14:29:59
举报
文章被收录于专栏:centosDaicentosDai

在linux中输入vi Makefile 来实现创建Makefile文件

注意:命令行前必须加TAB键

例如:将两个文件led.c和crt0.S汇编文件,制作一个Makefile文件

复制代码
复制代码
代码语言:javascript
复制
1 1 led.bin : crt0.S led.c
2 2 arm-linux-gcc -c -o crt0.o crt0.c
3 3 arm-linux-gcc -c -o led.o led.c
4 4 arm-linux-ld -Ttext 0x00000000 -g crt0.o led.o -o led_elf
5 5 arm-linux-objcopy -O binary -S led_elf led.bin
6 6 arm-linux-objdump -D -m arm led_elf > led.dis
7 7 clean:
8 8 rm -f led_elf led.dis led.bin *.o
复制代码
复制代码

?led.bin : crt0.S led.c 指的是依赖关系,led.bin是目标文件,:后面是依赖文件

arm-linux-gcc ?编译选项

  • -o ?编译及链接,会生成一个exe可执行文件
  • -Wall ?指定产生全部的警告信息?
  • ?-O/-O2/-O3 ? 数字越高,代表优化的更多,可以使生成的执行文件的提高执行效率
  • -c 编译不链接,会生成一个*.obj文件,若后面加了-o,则表示指定输出文件名称
  • -static ? 静态链接,生成的文件会非常大, 好处在于不需要动态链接库,也可以运行
  • -S 只激活预处理和编译,就是指把文件编译成为汇编代码

例如: arm-linux-gcc -c -o ?led.o led.c ? :编译不链接

arm-linux-gcc ? -o ?led ?led.c ? ? ? :编译以及链接

arm-linux-ld? ? 连接选项

  • -Ttext 0x00000000? ? ? ? ? ? ? 指代码段头地址为0x00000000
  • -T链接脚本? ? ? ? ? ? ? ? ? ? ? ? ? 指使用链接脚本来进行更复杂的地址设置,包括了代码段,数据段,bss段等
  • -o? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 后面指的将多个文件连接在一起,生成一个obj文件,上面的名称是led_elf。
  • ?-pie     ? ? ? ? ? ? ?  生成动态链接地址段,一般在新版uboot里会看到

arm-linux-objcopy ??复制选项,支持格式转换

  • -O binary? ? ?用来指定生成文件按照后面的格式来输出,其中binary是指生成二进制(.bin)文件。 ? ??
  • -S? ? ? ? ? ? ? ? ?不从源文件中复制重定位信息和符号信息到目标文件中去

arm-linux-objdump ??反编译选项?

  • -D? ? ? ? ? ? ? ? 反编译所有段
  • -b binary ? ? 指定反编译目标文件格式
  • -m ram ? ? ? 指定反编译目标文件所需的架构,这里是ram架构

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com