• ARM学习笔记10——GNU ARM命令行工具


    一、编译器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

  • 相关阅读:
    第07组 Alpha冲刺(1/6)
    第07组 团队Git现场编程实战
    第07组 团队项目-需求分析报告
    团队项目-选题报告
    第二次结对编程作业
    0012---求滑动距离
    0011---绝对值函数
    0010---温度转换
    0009---乘法问题
    0008---三位数倒序问题
  • 原文地址:https://www.cnblogs.com/zjzsky/p/3533532.html
Copyright © 2020-2023  润新知