C/C++编译过程(gcc)

来源:互联网 发布:制作表情包软件 编辑:程序博客网 时间:2024/06/06 02:17
1  配置gcc
下载:
     首先下载mingw,解压。
配置环境变量:
     系统变量中找到Path,在Path中添加    D:\Program Files\MinGW\bin;
测试:
      运行cmd,输入gcc -v就会看到其版本,否者,就配置没成功。

2  C/C++编译过程
程序名 hello.c
代码:
#include <stdio.h>
int main()
{
    printf("hello\n");
}

总编译过程
命令:gcc hello.c -o hello
此过程生成 hello.exe

实际上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。

2.1 预处理
   预处理的过程主要处理包括以下过程:
  • 将所有的#define删除,并且展开所有的宏定义
  • 处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等
  • 处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。
  • 删除所有注释 “//”和”/* */”.
  • 添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。
  • 保留所有的#pragma编译器指令,因为编译器需要使用它们
gcc -E hello.c -o hello.i 或 gcc -E hello.c
hello.i存放经预处理后的代码。

2.2 编译
  编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后生成相应的汇编代码。
gcc -S hello.i -o hello.s

2.3 汇编
    汇编器负责将生成的汇编代码转换为对应的机器码
gcc -c hello.s -o hello.o

2.4 连接
   连接器将所有程序运行所需的所有目标文件,以及所依赖的其他库文件连接起来,生成可执行文件。
   本程序是将其与c语言标准输入输出库进行连接,生成可自行文件。
gcc hello.o -o hello

3 多个程序文件的编译
通常整个程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。假设有一个由test1.c和 test2.c两个源文件组成的程序,为了对它们进行编译,并最终生成可执行程序test,可以使用下面这条命令:
gcc test1.c test2.c -test
 
如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令:
gcc -c test1.c -o test1.o
gcc -c test2.c -o test2.o
gcc test1.o test2.o -o test


http://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html  Linux GCC常用命令
http://smilejay.com/2012/01/c_compilation_stages/  C程序编译过程浅析
0 0
原创粉丝点击