一、编译器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. Java的云打印Lodop

        打印某一个网页上的内容我们都经常遇到过,比如网上申请港澳通行证时需要填写申请表,然后把申请表给打印出来.像这样的打印技术是怎么实现?这种打印可以通过一种叫云打印的插件来做,按我的理解云打印的技 ...

  2. Android版多线程下载器核心代码分享

    首先给大家分享多线程下载核心类: package com.example.urltest; import java.io.IOException; import java.io.InputStream ...

  3. nginx 自定义代理返回 404

    在nginx的http段,加上一面的配置 proxy_intercept_errors on;//自定义代理返回的404错误提示

  4. ubuntu 安装phpmyadmin

    参考文章: http://www.111cn.net/database/mysql/43957.htm    access错误的解决方法 1 首先下载  去官网下载phpmyadmin 2  然后直接 ...

  5. jquery 实现复选框单选

    $(function() { $(':checkbox[name=复选框name值]').each(function() {  $(this).click(function() {   if ($(t ...

  6. Swift语言 1小时速学教程

    本文由 张渊杰 (网名寂静)编写 Swift语言 1小时速学教程 写在前面的话 有些人可能想, 呵呵, 1小时学一门语言, 你不是搞笑吧, 我想说, 是的, 完全可以, 就要看你怎么学了 要想在1小时 ...

  7. Linq知识大全

    select的源码public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable< ...

  8. eclipse 启动 出现Failed to create the Java Virtual Machine" 解决方案

    方法如下: 找到eclipse目录下的eclipse.ini,可以看到如下内容:-startupplugins/org.eclipse.equinox.launcher_1.1.0.v20100507 ...

  9. 跨域Ajax请求WebService方法

    一.允许跨域Ajax请求,更改如下配置: 在要调用的WebService上面添加特性标签: 二.以如下返回用户信息的WebService方法为例 三.在另一个网站上通过Ajax访问webService ...

  10. 转:Stack Overflow通过关注性能,实现单块应用架构的扩展能力

    原文来自于:http://www.infoq.com/cn/news/2015/07/scaling-stack-overflow 在New York QCon 2015大会上,David Fulle ...