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
用于将多个目标文件、库文件连接成可执行文件。
- -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,则输出文件名为输入文件名
- -l bfdname或—input-target=bfdname 用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则arm-linux-objcopy自己分析
- -O bfdname 输出的格式
- -F bfdname 同时指明源文件,目的文件的格式
- -R sectionname 从输出文件中删除掉所有名为sectionname的段
- -S 不从源文件中复制重定位信息和符号信息到目标文件中
- -g 不从源文件中复制调试符号到目标文件中