嵌入式软件工程师&&太极拳
全部博文(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