首页  

gcc编译过程     所属分类 c 浏览量 820
gcc GNU C Compile  GNU C语言 编译器 只能编译C语言程序
后来做了扩展,支持更多的编程语言,比如C++

C语言的编译过程可分为四个阶段
预处理 编译 汇编 链接

gcc -E hello.c -o hello.i   
gcc -S hello.i -o hello.s 
gcc –c hello.s –o hello.o
gcc hello.o -o hello
链接 默认生成可执行文件 a.out, -o 指定输出文件名

.c  C源文件
.C .cpp .cc .c++ .cxx  C++源文件
.h  头文件
.i  预处理后的C源文件                           
.s  汇编程序文件
.o  目标文件
.a  静态链接库
.so 动态链接库



预处理 主要处理 以#开始的 预编译指令 
将所有的#define删除,并且展开所有的宏定义
处理所有条件编译指令,如#if,#ifdef等
处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。递归进行,被包含的文件可能还包含其他文件
删除所有的注释//和 /**/;
添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息
保留所有的#pragma编译器指令,因为编译器需要

编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件

汇编 将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令
gcc –c hello.s –o hello.o
hello.o 机器码 二进制文件  查看 hexdump hello.o 

链接操作最重要的步骤就是将函数库中相应的代码组合到目标文件中

上一篇     下一篇
mysql DATE_ADD 函数

C++ RAII 简介

GO 和 RUST

HTTP调用卡住的案例

cc gcc g++ 区别

makefile 实例