一分钟搞懂Linux下的GCC编译

Linux下的GCC编译

​ GCC(GNU Compiler Collection)即GNU编译器套件,属于一种编程语言编译器,其原名为GCC(GNU C Compiler)即GNU c语言编译器,虽然缩写一样但是功能上区别很大。GCC的初衷是为GNU操作系统专门编写的一款编译器,原本的GNU是专用于编译C代码,现如今已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了。

1.基本命令

gcc [options] [filenames]     //其中[options]表示参数,[filenames]表示相关文件的名称。
常见参数
参数名称含义
-E仅执行预处理,不进行编译、汇编和链接(生成后缀为 .i 的预编译文件)
-S执行编译后停止,不进行汇编和链接(生成后缀为 .s 的预编译文件)
-c编译程序,但不链接成为可执行文件(生成后缀为 .o 的文件)
-o直接生成可执行文件

2.gcc编译C语言过程示例:

可以使用以下命令一步完成所有编译步骤:

gcc hello.c -o hello          //对hello.c文件生成可执行程序
./hello					      //运行
四步骤:

在这里插入图片描述

  • 1、预处理:预处理,生成 .i 的文件[预处理器cpp]

  • 2、编译:将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]

  • 3、汇编:将汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]

  • 4、链接:连接目标代码, 生成可执行程序 [链接器ld]

Step1:预处理(-E .i)

预处理通过对宏定义(像#define)进行展开,对头文件(像 stdio.h)进行展开,对条件进行(像ifdef)编译,展开所有宏,删除所有注释(像"//")。预处理cpp把源代码以及头文件预编成一个.i文件。命令如下:

gcc -E hello.c -o hello.i            //-E只进行预处理,-o hello.i:这个选项指定了输出文件的名称。
Step2:编译(-S .s)

编译也就是检查语法是否错误,将预处理过的文件编译成汇编(.s)文件。命令如下:

gcc -S hello.i -o hello.s
Step3:汇编(-c .o)

汇编也就是将汇编(.s)文件生成目标文件(二进制文件)。通过汇编,文本代码变成了二进制代码(二进制代码文件以.o为后缀名)。命令如下:

gcc -c hello.s -o hello.o
Step4:链接

链接过程就是找到依赖的库文件(静态与动态),将目标文件链接为可执行程序。命令如下:

gcc [目标文件] -o [可执行程序] -l[动态库名]

假如没有动态库的话,直接使用以下命令:

gcc [目标文件] -o [可执行程序]
此例程即:gcc hello.o -o hello

假如没有动态库的话,直接使用以下命令:

gcc [目标文件] -o [可执行程序]
此例程即:gcc hello.o -o hello
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值