一、为什么要有gcc编译
自我理解,需要把高级语言,编译成成机器能识别的语言,或者文本。
这个是linux自带的编译工具,如果想要编译程序在开发板上运行还需要配置交叉编译链
例如arm-linux-gnueabihf-gcc -v
哪个交叉编译链先不讲,就这个gcc编译需要经过四步
1.预处理
主要就是对标准库的处理,包含头文件,找到头文件的位置,比如输入输出流
还有就是对宏的处理,把宏写进程序中
gcc -E -o hello.i hello.c .c文件变成.i文件
ggcc -E -o hello.i hello.c cc -E -o hello.i hello.c
2.编译
把.i文件变成汇编文件.s文件
gcc -S -o hello.s hello.i
就是把.cpp或者.c .py文件编译成汇编语言
对于语法错误,是在编译过程中发现的
3.汇编
把.s汇编文件变成.o目标文件,但是没有做链接
gcc -c -o hello.o hello.s
4.链接
把.o目标文件链接成一个APP文件,就是一个可执行的应用程序
gcc -c -o hello.o hello.s 二、gcc常用选项 1、 gcc -o test main.c sub.c
这个命令就包括了 1.预处理---编译---汇编---a.o目标文件 2.预处理---编译---汇编---b.o目标文件 最后a.o+b.o链接成为了应用程序

源文件少的时候这个命令很方便,但是源文件多的时候就不行了 2、当文件多的时候,就要先汇编再链接了,防止有一个.c文件出现问题的时候要重新汇编链接所有文件了 方法如下:

3、预处理的时候包含头文件的格式有的是尖括号,有的是双引号为啥 说明:尖括号要去系统库中查找 双引号是自己写的头文件
如果是交叉编译链,肯定去交叉编译链里面去搜索这些头文件
wandzhang@wandzhang-virtual-machine:/home/book/02_options/02_multi_files$ arm-linux-gnueabihf-gcc -c -o main_arm.o main.cwandzhang@wandzhang-virtual-machine:/home/book/02_options/02_multi_files$ ls
main_arm.o main.c main.o Makefile sub.c sub.h sub.o test test1
wandzhang@wandzhang-virtual-machine:/home/book/02_options/02_multi_files$ arm-linux-gnueabihf-gcc -c -o main_arm.o main.c -v
查看内容: #include "..." 搜索从这里开始:
#include <...> 搜索从这里开始:
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/include
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/include-fixed
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/4.9.4/../../../../arm-linux-gnueabihf/include
/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/../arm-linux-gnueabihf/libc/usr/include
搜索列表结束。