嵌入式软件工程师&&太极拳
全部博文(548)
分类: LINUX
2011-02-20 19:57:58
一、编译过程
*.c ---预处理---> *.i ---编译---> *.s ---+
+--->汇编---> *.o ---链接---> exec
*.S -----------预处理---------> *.s ---+
注: *.s是汇编(名词)文件,但*.s-->*.o的过程叫汇编(动词)
平时讲的编译包括所有过程,实际只是从*.i到*.s的过程
二、gcc选项
-o filename 输出文件
-c 不链接
-S 不汇编
-E 不编译
-v 显示GCC的配置命令,版本,编译时的信息
-Wall 显示所有警告
-g 加上GDB的调试信息
-O[1|2|3] 优化
-L dir 指定库目录
-l name 链接libname.[a|so]库
-nostartfiles 不链接系统的标准启动文件
-nostdlib 不链接系统的标准启动文件和标准库
-static 静态链接,默认动态
-shared 生成动态库,不是动态链接
-I 指定头文件目录
三、ld选项
-T{text|data|bss} addr 指定段起始地址
--verbose 显示默认链接文件
四、objdump选项
arm-linux-objdump [...] objfiles...
-b bfdname 指定目标文件代码格式
-d 反汇编代码段
-D 反汇编所有段
-EB | -EL 指定大小端
-f 显示文件头信息
-h 显示所有段信息
-i bfdname
-m arch 指定目标文件架构
arm-linux-objdump -D -m arm -b binary test.bin 反汇编二进制文件
五、objcopy选项
arm-linux-objcopy [...] infile [outfile]
-I bfdname 指定输入文件格式
-O bfdname 指定输出文件格式
-R secname 删除secname段
--info 列出bfdname