4 GCC编译过程
GCC使用的命令语法如下:gcc [选项] 输入的文件名。常用选项如下:
- -o:小写字母“o”,指定生成的可执行文件的名字,不指定的话生成的可执行文件名为a.out。
- -E:只进行预处理,既不编译,也不汇编。
- -S:只编译,不汇编。
- -c:编译并汇编,但不进行链接。
- -g:生成的可执行文件带调试信息,方便使用gdb进行调试。
- -Ox:大写字母“O”加数字,设置程序的优化等级,如“-O0”“-O1” “-O2” “-O3”, 数字越大代码的优化等级越高,编译出来的程序一般会越小,但有可能会导致程序不正常运行。
4.1 编译过程
- 预处理,在预处理过程中,对源代码文件中的文件包含(include)、 预编译语句(如宏定义define等)进行展开,生成.i文件。 可理解为把头文件的代码、宏之类的内容转换成更纯粹的C代码,不过生成的文件以.i为后缀。
- 编译,把预处理后的.i文件通过编译成为汇编语言,生成.s文件,即把代码从C语言转换成汇编语言, 这是GCC编译器完成的工作。
- 汇编,将汇编语言文件经过汇编,生成目标文件.o文件,每一个源文件都对应一个目标文件。 即把汇编语言的代码转换成机器码,这是as汇编器完成的工作。
- 链接,最后将每个源文件对应的.o文件链接起来,就生成一个可执行程序文件,这是链接器ld完成的工作。
如下地址找到它提供的ARM交叉编译器:https://releases.linaro.org/components/toolchain/binaries/ , 如下图所示,在它提供的编译器列表中首先选择版本号,然后可选择ARM架构类型,最后是具体的编译器平台。