GCC 用法简介

Gcc介绍目录
这里写图片描述

一、GCC简介
1、GCC的特点
Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。Gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。
2、GCC基本用法
Gcc最基本的用法是∶
gcc [options] filenames
options:编译器所需要的编译选项
filenames: 要编译的文件名

新建一个hello.c文件,文件内容如下

/*hello.c*/
#include <stdio.h>
void main()
{
  printf("hello world\n");
}

保存后执行gcc hello.c,会生成一个a.out 目录,运行a.out文件
./a.out,会打印出hello world

二、GCC深入使用
1,gcc编译流程
GCC编译器能将C/C++语言源程序、汇编程序形成
可执行文件。整个形成过程可以被细分为四个阶段:
经过预处理,编译,汇编,链接四个阶段
这里写图片描述

a,预处理
gcc -E hello.c -o(输出) hello.i
输出hello.i
这里写图片描述
打开hello.i,把预处理stdio.h所用到的头文件补全了。
b,编译成汇编文件
gcc - S hello.i -o hello.s
vim hello.s
可以看到hello.s是汇编文件

c,变成二进制文件
gcc -c hello.s -o hello.o

d,链接
gcc hello.o -o hello
最后得到hello这个可以执行的应用程序,可以执行./hello
打印出hello world
总结
Gcc通过后缀来区别输入文件的类别,常见类型有
v .c为后缀的文件: C语言源代码文件
v .a为后缀的文件: 是由目标文件构成的库文件
v .C,.cc或.cxx 为后缀的文件: 是C++源代码文件
v .h为后缀的文件: 头文件
v .o为后缀的文件: 是编译后的目标文件
v .s为后缀的文件: 是汇编语言源代码文件

2,gcc编译选项
掌握Gcc的使用方法,最重要的是掌握Gcc的编译选项,Gcc编译器的编译选项大约有100多个,其中多数我们根本就用不到,这里只介绍其中最基本、最常用的参数。-o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-o用法:
如gcc hello.c 直接生成默认的a.out
gcc hello.c -o xxx
那么就会生成xxx的可执行文件,不再生成a.out默认可执行文件

-O用法:对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。

#include <stdio.h>
int main(void)
{
double counter;
double result;
double temp;
for (counter = 0; counter < 2000.0 * 2000.0 * 2000.0 / 20.0 + 2020;
counter += (5 - 1) / 4) {
temp = counter / 1979;
result = counter;
}
printf(Result is %lf\\n, result);
return 0;
}

从代码中看到,temp被赋值但是没有用到,所以可以被优化掉,节省了时间和提高效率。我们可以从代码运行的时间来看
如把上面的程序保存在hello1.c里面
gcc hello1.c -o hello
time ./hello
可以看到打印的real时间为2.5s

如果用-O优化
gcc -O hello1.c -o hello
time ./hello
可以看到打印real的时间为0.6s

-O2:比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-c:不链接,编译器只是由输入的.c等源代码文件编译生成的.o为后缀的中间文件
即生成hello.o 文件不生成hello的执行文件
gcc -c hello.c

-g:产生调试工具(GNU的gdb)所需要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。
gcc -g hello.c -o hello 可以用ll查看hello比不加-g的hello的可执行程序要大

-I dirname: 将dirname所指出的目录作为编译器寻找头文件的标准路径。
C程序中的头文件包含两种情况∶
#include

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值