一、编译器arm-linux-gcc

  1、用arm-linux-gcc编译一个程序,一般它是要经过如下步骤的:

    1.1、预处理阶段

    编译器把上述代码中stdio.h编译进来,使用GCC的选项-E可以使GCC在预处理结束后停止编译过程,而不继续其他动作了。

    1.2、编译阶段

    首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,arm-linux-gcc把代码翻译成汇编语言。用户可以使用-S选项来进行查看,该选项只编译而不进行汇编,生成汇编代码。

    1.3、汇编阶段

    把编译阶段生成.s文件转成目标文件,使用者可使用选项-c就可产生.o文件了

    1.4、链接阶段

    系统把printf等函数的实现都做到名为lib.so.6的库文件中去了(或者采用精通连接时有的.a文件中),在没有特别指定时,arm-linux-gcc会到系统默认的搜索路径下进行查找,也就是链接到lib.so.6库函数中去,这样就能实现函数printf了,而这也是链接的作用

  2、arm-linux-gcc 常用命令行选项

    2.1、-o      表示要求编译器产生所指定文件名的文件,因为默认的可执行文件名是a.out

    2.2、-L 指定链接时

    2.3、-I 指定头文件.h的搜索目录

    2.4、-l 正常链接只会用libc这个函数库,其他函数库需要用这个命令指定链接

    2.5、-S 只建立组合语文件

    2.6、-D 条件编译,搭配#ifdef #define用,如果有定义才编译

    2.7、-c 表示只要求编译器进行编译,而不要进行链接,产生以原始文件的文件命名但把其后缀名由.c变成.o的目标文件

    2.8、-g 要求编译器在编译的时候提供以后对程序进行调试的信息

    2.9、-E 表示编译器只进行编译,而不做汇编和链接

    2.10、-O1/O2/O3 比编译器对程序提供的最优化选项,在编译的时候使用该选项,可以使产生的可执行文件的执行效率提高,编译器会根据CPU的架构编出优化的程序代码,需要多花一点编译时间。-O2比较常用

    2.11、-Wall 指定产出全部的警告信号

二、汇编器arm-linux-as

  汇编器用于将汇编源文件汇编成目标文件,示例用法如下: $arm-linux-as hello.s -o hello.o

三、连接器arm-linux-ld

  连接器用于连接目标文件和系统库中的函数代码(目标代码),示例用法如下:

  $arm-linux-ld test1.o test2.o -lc -o hello.elf hello.o

  将test1.o、test2.o和hello.o一起连接生成可执行文件hello.elf文件

四、文件格式转换arm-linux-objcopy  

  用于文件格式转换,将生成的hello.elf文件转换成二进制文件,示例用法如下: $arm-linux-objcopy -O binary hello.elf hello.bin

五、反汇编arm-linux-objdump

  用于将目标文件或elf格式可执行文件反汇编成汇编代码文件,示例用法如下: $arm-linux-objdump -S hello.o >hello.asm

六、elf格式文件查看:arm-linux-readelf  

  用来查看elf格式的文件的信息,可以输出elf文件额文件头信息,以及段信息,示例用法如下: $arm-linux-readelf -a hello.elf

七、静态库管理 arm-linux-ar  

  静态库管理软件,可以将产生的目标文件“.O”文件生成或添加到库中,也可以查看库中有的目标文件,示例代码如下: $arm-linux-ar rc hello.a hello.o

八、符号表生成指令 arm-linux-nm  

  生成elf文件中的符号,使用示例如下: $arm-linux-nm hello.elf >sym

九、去掉elf文件中不需要的信息和代码 arm-linux-strip  

  用于去掉文件中不使用的一些信息,如调试信息等,以减小目标文件的体积。从而节省存储空间或提高加载、执行效率,使用示例如下: $arm-linux-strip hello.elf

ARM学习笔记10——GNU ARM命令行工具的更多相关文章

  1. ARM学习笔记11——GNU ARM汇编程序设计

    GNU ARM汇编程序设计中,每行的语法格式如下: [<label>:] [<instruction | directive | pseudo-instruction>] @c ...

  2. ARM学习笔记12——GNU ARM汇编伪操作

    1..section 1.1.语法格式 .section section_name[,"flags"[,%type[,flag_specific_arguments]]] 1.2. ...

  3. 10款Windows命令行工具

    Windows下CMD不好用,远没有Linux,或者一些SSH工具用起来方便.其实Windows下,也有一些不错的工具替代CMD: 0.powercmd经过比较,我最终选择了这款,这里补充一下截图:

  4. 轻松学习Ionic (二) 为Android项目集成Crosswalk(更新官方命令行工具)

        现在集成crosswalk不用这么麻烦了!官方的命令行工具已经能让我们一步到位,省去很多工作,只需在cmd中进入项目所在目录(不能有中文目录,还得FQ),执行: ionic browser a ...

  5. Hadoop学习笔记(10) ——搭建源码学习环境

    Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...

  6. matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色

    一起来学matlab-matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 < ...

  7. matlab学习笔记8 基本绘图命令-三维绘图

    一起来学matlab-matlab学习笔记8 基本绘图命令_6 三维绘图 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 ...

  8. Hadoop源码学习笔记(6)——从ls命令一路解剖

    Hadoop源码学习笔记(6) ——从ls命令一路解剖 Hadoop几个模块的程序我们大致有了点了解,现在我们得细看一下这个程序是如何处理命令的. 我们就从原头开始,然后一步步追查. 我们先选中ls命 ...

  9. Android:日常学习笔记(10)———使用LitePal操作数据库

    Android:日常学习笔记(10)———使用LitePal操作数据库 引入LitePal 什么是LitePal LitePal是一款开源的Android数据库框架,采用了对象关系映射(ORM)的模式 ...

随机推荐

  1. 设置contentType

    //定义编码 header( 'Content-Type:text/html;charset=utf-8 '); //Atom header('Content-type: application/at ...

  2. can't find -lsocket的解决办法

    在UNIX/LINUX当中是不存在libsocket的.传说中,socket的功能库是放在libc当中的,所以如果需要连接的话修改成-lc就可以了.

  3. Google Test Frame 简单使用例子

    1 序言——为什么折腾Google Test 被逼无奈的. 最近研究google开源的基于列存储的数据库查询引擎supersonic源码.初略的浏览了一遍代码,竟然没有main函数,顿时惊讶的目瞪口呆 ...

  4. SQLite学习第01天:参考资料

    今天开始学习数据库相关的知识,由于本人从事的是嵌入式软件开发方向,所以在数据库的选择时就果断选择了SQLite,在网上搜索了一下相关的资料并且配置好了环境.首先,想要对SQLite有一个基本的了解还是 ...

  5. 《JavaScript高级程序设计》笔记(1):<script>元素

    使用<script>元素内部的JavaScript代码将从上至下依此解释.在使用<script>嵌入的JavasCript代码时,代码任何地方不能出现"</sc ...

  6. XML1_XML基础

    1.XML的作用 XML 被设计用来传输和存储数据.所以XML 是不作为的. 2.简单的描述 XML 文档形成一种树结构. XML 文档必须包含根元素.该元素是所有其他元素的父元素.XML 文档中的元 ...

  7. Python学习笔记——正则表达式入门

    # 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. ...

  8. 阿里云主机建立SWAP分区脚本

    工具:add_swap.sh    所有执行的脚本都需要root身份来执行,执行方法:以root身执行命令:bash xxx.sh 功能:自动检测系统swap分区大小,交换分区大小不合理则自动新增并挂 ...

  9. IT全称

    1.jar,war,ear(摘自:http://blog.sina.com.cn/s/blog_54bb7b950100wnbb.html) Jar文件(扩展名为. Jar)包含Java类的普通库.资 ...

  10. Forget asp.net membership,ASP.NET Identity Overview

    http://www.asp.net/identity http://www.asp.net/identity/overview/getting-started/introduction-to-asp ...