【linux浅谈014】gcc的使用

本文详细介绍了GCC(GNU Compiler Collection)对不同文件后缀的处理,包括C、C++、Objective-C源文件及预处理、汇编、目标文件等。同时,解释了GCC的编译、汇编和链接三个阶段,以及直接使用GCC生成可执行文件的参数,如编译选项(-I, -D, -O)、输出警告(-Wall)和调试信息(-g)。在算法竞赛中,GCC的优化级别选择对STL性能的影响也有所提及。

1.gcc文件对文件后缀的处理

首先是gcc对于各个文件后缀的识别

.c为后缀的文件,C语言源代码文件;
.a为后缀的文件,是由目标文件构成的库文件;
.C,.cc或.cxx 为后缀的文件,是C++源代码文件;
.h为后缀的文件,是程序所包含的头文件;
.i 为后缀的文件,是已经预处理过的C源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的目标文件;
.s为后缀的文件,是汇编语言源代码文件;
.S为后缀的文件,是经过预编译的汇编语言源代码文件

2.gcc各个参数说明

2.1编译阶段

指令

gcc-S hello.i -o hello.s

编译器:gcc
将.s文件生成汇编语言

2.2汇编阶段

指令

gcc-c hello.s -o hello.o

汇编器:as
生成二进制代码

2.3链接器

指令

gcc hello.o -o [应用](默认a.out)

连接器:od
链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。

2.4直接使用gcc

指令

gcc hello.s -o [应用](默认a.out)

gcc自动调用编译器汇编器连接器等

2.5gcc直接生成应用时各个参数说明

指令

 -Include[指定头文件寻找地址(先去系统库后去指定库)]
 -D[定义好的宏指令]
 -O[是否进行优化,将无用代码折叠]0123四个级别【注1】【注2】
 -wall[输出警告信息]
 -g[加入调试信息]

注1:传说中gcc共有5个优化级别,-O4优化选项是将你的代码邮件给Jeff重写一下[就算你写O8也只是给你开到O3别痴心妄想了]
注2:但是实际应用中STL编译的时候,我们会开O2优化,开完之后其实速度跟数组模拟的队列差不多快
在算法竞赛中,比赛方一般不会开O2优化,这种情况下STL的栈队列要比数组模拟的栈队列慢一倍左右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值