学习Linux的,尤其是学习嵌入式Linux的,对GCC比较熟悉。当然我记录的都是自己的一些笔记,所以都是很基础的东西。
那我们来说说GCC的一些事情吧。
首先我们知道GCC就是一个编译器,我们写一个程序出来,这个程序我们称之为源代码。但是这个源代码,计算机是无法识别的。这就需要gcc编译成计算机可以执行的可执行文件。
对于这样一个的一个过程需要进行着四个关联的步骤:
预处理:
机器只能执行二进制的代码,在形成二进制代码之前的那个过程,我们就称之为预处理。
典型地,由预处理器(preprocessor) 对程序源代码文本进行处理,得到的结果再由编译器核心进一步编译。
这个过程中,对源代码文件中的文件包含(include),预编译语句(如宏定义define等)进行分析
编译:这个过程其实就是生成以.o为后缀的目标文件的过程。
汇编:汇编过程是针对的汇编语言的步骤,调用as进行工作,也是生成以.o为后缀的目标文件
链接:上述的两步都是形成了.o文件,这个部分就是很重要的链接阶段,就是将所有的目标文件安排在可执行程序中恰当的位置。同时该程序所调用到的库函数也从各自所在的库中连接到合适的地方来。
分割线------------------------------------------------------------------------GCC内部实现的机制-------------------------------------------------------------------------------------------------------
这个地方我们就来说说常用的GCC选项有哪些?
首先我们按照上述的四个步骤依次来实现一下:
上面简单的说了从源文件到可执行文件生成的整个过程。
还有哪些是我们常用的呢?
1)-I gcc在链接库时,标准头文件路径在/usr/include下,对于自定义文件的使用,可以放进此目录下,也可以使用-I 指定其目录。
2)-Ldir 制定编译时,搜索库的路径
3)-static 静态链接
区分下静态链接与动态链接的区别: