Arm-linux-gcc:
这个命令是程序的包装,它会根据不同的参数要求去调用预编译编译程序cc1(预处理+编译),汇编器arm-linux-as,链接器arm-linux-ld.
GCC的常用选项:
-E: 仅作预处理,不进行编译,汇编和链接。
-S: 编译到汇编语言,不进行汇编和链接
-c: 编译、汇编到目标代码,不进行链接
-o: 设置输出文件名(默认是a.out)
-W: 设置警告。用-W all 开启所有的警告。
-I dir 添加头文件目录路径(I是i的大写)
-I library:参数library是函数库的路径(是L的小写l)。
-L dir:添加库目录路径
-g:加入调试信息。程序必须有这个参数,才能被调试)
-O或-O2或-O3或O0: 对代码进行优化。其中数字代表等级,0表示不优化。
-nostartfiles: 不链接系统标准启动文件,而标准库文件仍然正常使用。(注:对于一般的应
用程序,这些启动文件是必须的。在编译bootloader、内核时,需要使用这个 选项)
-nostdlib: 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。(注: 这个选项常用于编译内核,bootloader等程序,它们不需要启动文件,标准库 文件)
-static: 以静态方式连接目标文件。
-share: 生成一个共享OBJ文件。
arm-linux-ld:
用于将多个目标文件、库文件连接成可执行文件
常用参数:
-T : 用来指定代码段、数据段、bss段的起始地址,也可以用来指定一个连接脚本(注: 只用于连接bootloader、内核等没有底层软件支持的软件。
Eg: arm-linux-ld -Ttext 0x0000000 -g hello.o
arm- linux-ld -Tdate 0x00000 -g hello.o
arm-linux-ld -Tbss 0x0000 -g hello.o
-nostdlib:
-nostartfiles
arm-linux-objcopy:
用来复制一个目标文件的内容到另一个文件中,可以进行格式转换
一般用来只复制执行代码到一个文件中
常有选项:
-O: 用来指定输出文件的格式
-S 不从源文件中复制重定位信息和符号信息到目标文件中去
-g 不复制调试信息
Eg: arm-linux-objcope -O binary -S SrcFile DesFile (SrcFile是一个二进制文件,如:a.out)
arm-linux-objdump:
用于显示二进制文件信息,常用来查看反汇编代码
常用选项:
-d: 反汇编可执行代码
-D: 反汇编所有段
-EB或EB指定字节序 即big|little endian
-f: 显示文件的整体头部摘要信息
-h: 显示目标文件各个段的头部摘要信息
Eg: arm-linux-objdump -d hello.bin >hello.dis //查看hello.bin的汇编代码