gcc编译过程理解

GNU CC(通常称为GCC)是GNU项目的编译器,它能够编译C、C++语言编写的程序。


使用gcc,程序员可以对编译过程有更多的控制,编译过程分为3个阶段。
预处理;
汇编;
链接。
程序员可以再编译的任何阶段结束后停止整个编译过程以检查编译器在该阶段输出的信息。


深入了解gcc之前,我们先看一个小例子。

#include <stdio.h>

#include <stdlib.h>

int main()

{

printf("Hello World\n");

printf("Hello Silece\n");

return 0;

}


/*改程序名为a.c*/


在命令行键入命令编译和运行这段程序
gcc -o
  a   a.c
这行命令告诉gcc对源程序
a.c进行编译和链接,并使用参数-o指定创建名为a
的可执行程序。
整个过程看上去仿佛是一气呵成的,但其实是分几步的
1.预编译源代码;
2.编译目标代码;
3.链接程序。

源代码(例如a.c)------->预处理器-------->编译器----->目标代码(例如a.o)------>连接器---------可执行程序

^     ^

|   |

|   |

头文件(*.h)    库代码


gcc -o a a.c             -o 参数表示输出文件为a

预编译
在命令行键入命令。
$gcc  -o  a1.c  -E     a.c    (可以查看一下a1.c里面的内容,就会发现有什么不同了)
这行命令告诉gcc对源程序a.c进行预编译,预编译结果输出到a1.c文件中。



-c参数表示只编译,不链接

编译
在命令行键入命令。
gcc -o  a.o  -c  a1.c   
这行命令告诉gcc对源程序a1.c进行编译,但不链接,编译输出到a.o文件中。


链接
在命令行键入命令。
$gcc -o a a.o
这行命令告诉gcc对源程序a.o进行链接,生成可执行程序a。


如果是这样编译:gcc -o a.c   则生成的可执行程序默认为a.out(这个文件名是历史遗留问题)



gcc -S  -o  a.s  a.c    这个是生成汇编文件a.s


gcc   -o a a.c -lpthread  这里的-lpthread 中的-l表示连接指定的库(pthread是多线程的库,当然,我这里的a.c并没有使用多线程的库函数)


gcc -o -Wall a a.c   这里的-Wall参数表示开启所有告警信息









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值