C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程

使用gcc编译C语言程序

  • C语言程序实现的过程
  • gcc命令
    • 基础用法
    • 常用选项
      • 编译和汇编选项:
      • 优化选项:
      • 调试选项:
      • 链接选项:
      • 警告选项:
    • 实验
      • 对于`-o`选项
  • 通过gcc命令熟悉C语言程序的执行过程
    • 1.预处理
    • 2.编译阶段
    • 3.汇编阶段
    • 4.链接阶段

C语言程序实现的过程

主要分为以下几个阶段:

  1. 预处理阶段
  2. 编译阶段
  3. 汇编阶段
  4. 链接阶段
  5. 生成可执行文件

详情请参考C语言入门(一)——C语言程序的执行过程和构造

gcc命令

GCC的全称为GNU Compiler Collection(GNU是一个项目,旨在创建一个完全免费、开源的类Unix操作系统,Compiler 是编译器,Collection 是集合)。gcc是一套由GNU项目开发的编程语言编译器。它支持多种编程语言,包括C、C++、Fortran、Ada、Objective-C等,当然gcc最常使用的情形是编译C语言程序。

基础用法

gcc [选项] 源文件1 [源文件2 ...] 
gcc [选项] 源文件1 [源文件2 ...] -o 输出文件名

这里的[选项]和[源文件2…]不是必须的。
-o选项是默认要加上的。

常用选项

编译和汇编选项:

-E: 只进行预处理,生成预处理后的代码。
-S: 生成汇编代码而不进行后续的编译和链接。
-c: 只编译不链接,生成目标文件。

优化选项:

-O[level]: 设置优化级别(0 到 3)。
-Os: 优化以减小代码大小。
-Og: 适用于优化调试时的代码。

调试选项:

-g: 生成调试信息。
-ggdb: 生成适用于 GDB 的调试信息。

链接选项:

-l<library>: 链接时指定使用的库。
-L<directory>: 添加库文件搜索路径。
-static: 静态链接生成可执行文件。

警告选项:

-Wall: 启用常见的警告。
-Werror: 将警告视为错误。

实验

对于-o选项

我们以一个最经典的C语言程序为例子,应用gcc对程序进行编译

#include 
int main()
{
	printf("Hello world!\n");
	return 0;
}

如果没有-o 输出文件这段代码,那么默认会输出名为a.out的可执行文件。
C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程_第1张图片
下面的实验关于-E、-S、-c选项的应用。

通过gcc命令熟悉C语言程序的执行过程

我们如果只想执行代码,使用基础用法中的代码即可,以下主要是为了熟悉C语言的实现过程。

1.预处理

使用-E选项活动.o为后缀的文件
在这里插入图片描述
使用cat查看test.i的内容后,其实包含了很多的宏的定义,函数的声明等等,最后才是main函数

2.编译阶段

使用-S选项活动.s为后缀的汇编程序。
C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程_第2张图片
编译阶把高级的C语言转变为较低级的汇编语言,这里的语言就是汇编语言。

3.汇编阶段

使用-c选项活动.o为后缀的汇编程序。
在这里插入图片描述

因为汇编阶段的程序已经进行了编译,输出的是机器代码,是二进制代码,如果使用cat进行查看就会出现一堆乱码,所以这里我们使用od命令进行查看。

od -t x1 test.o

C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程_第3张图片

4.链接阶段

在这里插入图片描述

你可能感兴趣的:(Linux,C语言,c语言,linux,开发语言)