1、arm-linux-gcc

在命令arm-linux-gcc后面跟一个或多个选项,选项间用空格隔开,然后跟一个或多个目标文件。

例如,将test.c 编译成目标文件test.o 并且生成调试信息:

arm-linux-gcc–g –c –o test.o test.c

命令选项列表

输出控制选项:

-c       将输入的源文件编译成目标文件

-S       将C/C++文件生成汇编文件

-o file   将输出内容存于文件file

-pipe    在编译的不同阶段之间采用管道通讯方式

-v      打印出编译过程中执行的命令

-x language  说明文件的输入类型为language

C语言选项:

-ansi          支持所有ANSI C程序

警告选项:

-w              关闭所有警告

-Wall          打开所有警告

-Wimplicit  如果有隐含申明,显示警告信息

-Wno-implicit  不显示对隐含申明的警告

调试选项:

-g    在文件中产生调试信息(调试信息的文件格式有stabs、COFF、XCOFF、DWARF)

优化选项:

-O0            不优化

-O1            一级优化

-O2            二级优化

-O3            三级优化

预处理选项:

-E       运行C的预处理器

-C       在运用-E进行预处理时不去掉注释

-D macro       定义宏macro为1

-D macro=defn  定义宏macro为defn

汇编选项:

-Wa,option    将选项option传递          给汇编器

搜索路径选项:

-I dir         设置搜索路径为dir

-I-       指定只对 #include  "file",有效的头文件搜索目录

源文件类型的识别

arm-linux-gcc能够自动根据文件名后缀识别文件类型.

文件名后缀和文件类型的对应关系如下:

*.c   ——C源文件

*.i   ——经过预处理后的C源文件

*.h   ——C头文件

*.ii   ——经过预处理后的C++源文件

*.cc   ——C++源文件

*.cxx   ——C++源文件

*.cpp   ——C++源文件

*.C  ——C++源文件

*.s   ——不需要预处理的汇编文件

*.S  ——需要预处理的汇编文件

此外,用户可通过-x language说明文件的输入类型,此时可以不用以上的后缀规则。

-x language

其中的language可为:

c       ——C源文件

c++        ——C++源文件

c-header      ——C头文件

cpp-output   ——经过预处理后的C源文件

c++-cpp-output   ——经过预处理后的C++源文件

assembler   ——不需要预处理的汇编文件

assembler-with-cpp  ——需要预处理的汇编文件

 

2、arm-linux-ld

用于将多个目标文件、库文件连接成可执行文件。

  1. -T选项是ld命令中比较重要的一个选项,可以用它直接指明代码的代码段、数据段、bss段,对于复杂的连接,可以专门写一个脚本来告诉编译器如何连接。

    -Ttext addr  数据段存放地址addr

    -Tdata addr  代码段存放地址addr

    -Tbss addr  bss段存放地址addr

连接脚本文件(.lds),通过-Tlinkfile.lds来进行连接

SECTIONS {

  ...

  secname start ALIGN(align) (NOLOAD) : AT ( ldadr )  

  { contents } >region :phdr =fill

   ...

}

secname和contents是必须的,其他的都是可选的。下面挑几个常用的看看:

1、secname:段名

2、contents:决定哪些内容放在本段,可以是整个目标文件,也可以是目标文件中的某段(代码段、数据段等)

3、start:本段连接(运行)的地址,如果没有使用AT(ldadr),本段存储的地址也是start。GNU网站上说start可以用

任意一种描述地址的符号来描述。

4、AT(ldadr):定义本段存储(加载)的地址。

5、ALIGN(align):指定对齐要求

 

3、arm-linux-objcopy

被用来复制一个目标文件的内容到另一个文件中,可用于不同源文件的之间的格式转换

示例:

arm-linux-objcopy –o binary –S elf_file bin_file

 常用的选项:

input-file , outflie

输入和输出文件,如果没有outfile,则输出文件名为输入文件名

 

  1. -l bfdname或—input-target=bfdname 用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则arm-linux-objcopy自己分析
  2. -O bfdname 输出的格式
  3. -F bfdname 同时指明源文件,目的文件的格式
  4. -R sectionname 从输出文件中删除掉所有名为sectionname的段
  5. -S 不从源文件中复制重定位信息和符号信息到目标文件中
  6. -g 不从源文件中复制调试符号到目标文件中

 

posted on 2013-04-11 21:23  阿逸  阅读(480)  评论(0编辑  收藏  举报