为了更深入了解程序编译,尽量从无到有地进行系统性地了解,先对程序编译中使用到的GCC与G++进行认识,熟悉。
首先该篇借鉴自以下博客,如果大家需要了解更加详细可以打开如下链接:
GCC使用简介
gcc与g++的区别
(顺带说下刚了解的:在include语句中,“<>”表示在标准路径中搜索头文件,““””表示在本目录中搜索。)
GCC
GCC由英文GNU Compier Collection简写而来,其作用是将我们平常通过高级计算机语言编写的源代码构建成计算机能认识的,能直接进行处理的二进制代码。
GCC是Linux下最常用的编译程序,是Linux平台下编译器的事实标准,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍 的一种编译器。
使用GCC的理由
GCC一直被大家所广泛使用,当然也有其原因,下面来分几点进行阐述GCC能被大家所广泛使用的理由:
一、支持多种方式的开发
支持宿主开发:即要为哪个平台开发程序,就在哪个平台上进行开发。
支持交叉编译:即要为哪个平台开发程序,但在另一个平台上进行的开发编译。
二、支持多种操作系统
Linux,Windows,Solaris…
三、支持多种计算机语言
支持C、C++、Ada、Java、Objective-C、FORTRAN、Pascal…
GCC的编译过程
对于GNU来说,程序的编译共进行4步,如下引用图所示:
下面对这几个过程做简要说明:
预处理
输入文件:.c源代码文件;
输出文件:.i中间文件;
需要文件:类似.h头文件的包含文件;
主要处理内容:主要处理文件中的#ifdef、 #include和#define命令;
特地生成输出文件命令:gcc -E xxx.c -o xxx.i(这里.i文件一般用不到);
编译
输入文件:预处理生成的.i文件;
输出文件:.s文件;
特地生成输出文件命令:GCC -S xxx.i -o xxx.s;
汇编
输入文件:编译生成的.s文件;
输出文件:.o文件;