跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C

初识 Linux 与 gcc 编译器

GCC 是 Linux 环境下用于编译 C/C++ 程序的核心工具。从源代码生成可执行文件的四个步骤:预处理、编译、汇编和链接。阐述了 gcc 的关键参数功能,包括各阶段的控制选项及输出格式。同时对比了静态链接与动态链接的区别,解释了静态库与动态库的概念及其后缀名。最后总结了 gcc 常用的调试、警告及优化等级选项,帮助读者掌握基础编译流程。

全栈工匠发布于 2026/3/20更新于 2026/10/2195 浏览
初识 Linux 与 gcc 编译器

前言

学习了 vim 编辑器,我们能够在 Linux 下写代码,那我们如何让代码运行起来呢?

现在就来学习使用 gcc

gcc/g++ 编译器

现在有这样的一个 test.c 文件

在这里插入图片描述

我们使用 gcc 对它进行编译,形成可执行程序 (默认形成 a.out)

在这里插入图片描述

编译 - 链接

隐约记得,在 C 语言 学习中,简单的学习过编译和链接,当时也使用了 gcc 形成中间临时文件;

现在再来看一下,文件编译链接的过程

文章配图

这里简化一下:

在这里插入图片描述

这里再简单描述一下,描述一下 gcc 选项及其功能。

1. 预处理

预处理主包括宏定义、文件包含、语法编译、去注释等。

预处理指令以 # 开头

gcc -E code.c -o code.i -E:让 gcc 编译器在预处理结束后就停止

-o:指定输出文件,.i 文件是已经预处理过的 C 原始程序

2. 编译

编译阶段,gcc 要检查代码规范性、是否存在语法错误,并且确定代码实际的操作;检查无误后将代码翻译成汇编语言。

gcc -S code.i -o code.s 

-S:只进行编译而不进行汇编,生成汇编代码。

3. 汇编

汇编就是将编译生成的汇编代码 .s 文件,转化为目标文件。

gcc -c code.s -o code.o 

在此时生成的 -o 文件就是一个二进制目标文件了;但是不是可执行程序,还需要进行链接

4. 链接

gcc code.c -o code 

在链接时,可以动态链接,也可以静态链接(gcc 默认是动态链接)静态链接需要带选项 -static

动态链接:

ldd 可执行程序 (动态链接) 

用来查看程序所依赖的动态链接库信息

在这里插入图片描述

file 文件 

可以用来查看文件类型

在这里插入图片描述

静态链接:

gcc 默认动态链接,静态链接需要带上 -static 选项

静态链接就是将库内容拷贝到文件中。(这里不演示了)

链接完成以后就形成了真正可以执行的可执行程序。

在这里插入图片描述

链接,这里就涉及到 动静态库 这个概念。

动静态库

静态库

所谓静态库,就是在编译链接时,将库文件的所有内容拷贝到可执行程序中,生成的文件都比较大,在运行时不需要库文件了;

.a 是其后缀名。

动态库

动态库就并没有在编译链接时将库文件拷贝到可执行程序中;而是在程序运行时由运行时链接文件加载到库,这样就节省系统的开销。

一般后缀名是 .so。

在上文 ldd 查看动态链接库中 lib.so.6 就是动态库

gcc 默认使用动态库。

gcc 选项

-E:只进行预处理,不生成文件,需要重定向到一个文件中。(-o)-S:编译到汇编语言,不进行汇编和链接操作-c:编译到目标代码,不进行链接操作-o:输出到目标文件-static:对生成文件采用静态链接-g:生成调试信息,GNU 调试器可以利用此信息-shared:尽量使用动态库,生成文件较小,需要系统存在动态库O0、O1、O2、O3:编译器优化的三个选项,-O0 没有优化、O1 是缺省值、O3 优化级别最高。-w:不生成任何警告信息-Wall:生成所有警告信息

到这里,gcc 就结束了;有部分细节内容可以深入学习。

目录

  1. 前言
  2. gcc/g++ 编译器
  3. 编译 - 链接
  4. 1. 预处理
  5. 2. 编译
  6. 3. 汇编
  7. 4. 链接
  8. 动静态库
  9. 静态库
  10. 动态库
  11. gcc 选项

更多推荐文章

查看全部
  • Python 字典(dict)数据类型详解
  • Spring Boot 消息队列集成与异步通信实战
  • Git 与 TortoiseGit 小乌龟安装配置指南
  • 《Agent Runtime 工程化》第七章 权限与安全边界:7.8 验收标准
  • MCP Document Reader:AI 助手读取本地文档工具
  • Stable Diffusion 秋叶整合包安装与使用指南
  • Go 项目中使用 Casbin 实现 RBAC 权限管理
  • 基于 SpringBoot+Vue 的智慧学生校舍管理系统
  • 跳表核心原理与 C++ 实现深度解析
  • Rspack:基于 Rust 的下一代高性能 Web 构建工具
  • Java 集合框架中 HashSet、HashMap、TreeSet 与 TreeMap 的关系解析
  • Linux 进程核心概念:从冯·诺依曼体系到 PCB 详解
  • 基于视觉的增强现实特效技术解析
  • Python 描述符详解:属性访问拦截机制
  • 微服务链路追踪实战:SkyWalking 与 Zipkin 架构对比及优化
  • 基于 Python 数据分析瑞幸与星巴克全国门店分布及关联关系
  • Ubuntu 22.04 下 libwebkit2gtk-4.1-0 安装避坑指南
  • 2026 年 3 月科技圈大事:AI 智能体元年与硬件平权
  • 基于 Java 21 虚拟线程的 RAG 平台架构设计与实践
  • 基于 Vivado IP 核的 LVDS 高速通信实现指南

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online