交叉编译工具选项说明
arm-linux-gcc
一个c/c++文件要变成可执行文件需要4步:预处理 -> 编译 -> 汇编 -> 链接;
在使用arm-linux-gcc时的常用选项:
可使用的选项 | 功能描述 |
---|---|
-c | 预处理、编译和汇编文件,但是不作链接,GCC通过用“.o”替换源文件名的后缀“.c”,“.i”,“.s”等生成OBJ文件(.o文件) |
-S | 编译后即停止,不进行汇编, 对于每个输入的非汇编语言文件,输出结果是汇编语言文件。默认情况下,GCC通过用“.s”替换源文件名后缀“.c”,“.i”等,产生汇编文件 |
-E | 预处理后即停止,不进行编译 |
-o | 指定输出文件的文件名,无论是预处理、编译、汇编还是链接,这个选项都可以使用 |
-Wall | 基本打开了所有需要注意的警告信息 |
-nostdlib | 不链接系统标准启动文件和标准库文件,只把指定的文件传递给链接器,这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件 |
-g | 以操作系统的本地格式产生调试信息,供GDB调试使用 |
arm-linux-ld
用于将多个目标文件、库文件链接成可执行文件;
”-T“选项,可以直接使用它来指定代码段(-Ttext)、数据段(-Tdata)、bss段(-Tbss)的起始地址,也可以用来指定一个链接脚本,在链接脚本中进行更复杂的地址设置;
注:”-T“选项只用于链接Bootloader、内核等没有底层软件支持的软件,链接运行于操作系统之上的应用程序时,无需指定”-T“选项,它们使用默认的方式进行链接;
arm-linux-objcopy
用来复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换;
常用arm-linux-objcopy来将ELF格式的可执行文件转换为二进制文件;
格式:-O bfdname 或 --output-target=bfdname(使用指定的格式来输出文件,bfdname是BFD库中描述的标准格式名,例”arm-linux-objcopy -O binary xxx.elf xxx.bin“);
arm-linux-objdump
用于显示二进制文件信息,常用于查看反汇编代码;
常用选项是:
选项 | 功能描述 |
---|---|
-b | 指定目标码格式 |
-D | 反汇编所有段 |
-m | 指定反汇编目标文件时使用的架构 |
例:
-
将ELF格式的文件转换为反汇编文件:
arm-linux-objdump -D elf_file.elf > dis_file.dis
-
将二进制文件转换为反汇编文件:
arm-linux-objdump -D -b binary -m arm bin_file.bin > dis_file.dis