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

简介: 转自:http://www.cnblogs.com/lifexy/p/7065175.html 在linux中输入vi Makefile 来实现创建Makefile文件 注意:命令行前必须加TAB键 例如:将两个文件led.

转自:http://www.cnblogs.com/lifexy/p/7065175.html

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

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

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

复制代码
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架构

 


有什么不懂的或有误的地方欢迎指出,非常感谢

版权声明:本文为博主原创文章,未经博主允许不得转载。


【作者】 张昺华
【新浪微博】 张昺华--sky
【twitter】 @sky2030_
【facebook】 张昺华 zhangbinghua
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
目录
相关文章
|
26天前
|
Rust Ubuntu Java
[Linux工具] Makefile
Makefile是Linux环境下用于自动化编译和链接程序的配置文件,常用于简化大型项目的编译流程。通过定义目标文件、依赖文件及生成命令,Makefile能高效管理编译任务。它不仅适用于C语言项目,还可扩展到其他编程语言和非编程任务中。
52 20
[Linux工具] Makefile
|
8天前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
38 20
|
7天前
|
Unix Linux C语言
【Linux】 Linux makefile 教程
本文详细介绍了 Linux 环境下 Makefile 的基本结构、语法和使用方法,并通过一个简单的 C++ 项目示例演示了 Makefile 的实际应用。Makefile 是一个强大而灵活的工具,通过合理配置,可以极大地简化项目的编译和管理过程,提高开发效率。希望本文能帮助您更好地理解和应用 Makefile,在实际项目中高效管理代码的编译和构建。
42 16
|
4月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
4月前
|
Linux C++
Linux c/c++之makefile的基础使用
Linux下C/C++项目中makefile的基本使用,包括基础、进阶和高级用法,以及如何创建和使用makefile来自动化编译过程。
50 0
Linux c/c++之makefile的基础使用
|
6月前
|
Linux C语言
成功解决 在Linux CentOS 7 中安装gcc
这篇文章介绍了如何在Linux CentOS 7系统中安装gcc (g++) 8工具集。由于CentOS 7默认的gcc版本是4.8,而这个版本与Qt 5.14、Qt 5.15或更高版本不兼容,可能会导致编译时出现系统头文件错误。文章中提到,即使在项目配置中添加了`CONFIG+=c++11`,如果仍然报错,那么很可能是gcc版本的问题。为了解决这个问题,文章提供了使用CentOS的Software Collections (scl)来安装更新版本的gcc的步骤。
成功解决 在Linux CentOS 7 中安装gcc
|
5月前
|
Linux 编译器 C语言
Linux内核对GCC版本的检测
Linux内核对GCC版本的检测
|
6月前
|
Java Linux 编译器
【Linux】gcc简介+编译过程
【Linux】gcc简介+编译过程
154 0
|
7月前
|
Java Linux C++
【Linux】Make和Makefile快速入门
【Linux】Make和Makefile快速入门
49 0
|
7月前
|
Java Linux 编译器
编写和使用Linux Makefile
编写和使用Linux Makefile