第 15 章 使用 GCC 构建代码
本章论述了源代码必须转换为可执行代码的情况。
15.1. Code Forms 之间的关系
先决条件
- 了解编译和链接的概念
可能的代码表单
使用 C 和 C++ 语言时,有三种类型的代码:
使用 C 或 C++ 语言编写的源代码,以纯文本文件形式存在。
文件通常使用扩展名,如
.c
,.cc
,.cpp
,.h
,.hpp
,.i
,.inc
。有关支持的扩展及其解释的完整列表,请查看 gcc 手册页:$ man gcc
对象代码,通过使用 编译器 编译 源代码来创建。这是一种中间形式。
对象代码文件使用
.o
扩展名。可执行代码,通过带有一个 linker 的 linking 对象代码来创建。
Linux 应用程序可执行文件不使用任何文件名扩展名。共享对象(library)可执行文件使用
.so
文件名扩展名。
也存在用于静态链接的库存档文件。这是使用 .a
文件名扩展名的对象代码变体。不建议使用静态链接。请参阅 第 16.2 节 “静态和动态链接”。
在 GCC 中处理代码表单
从源代码生成可执行代码需要两个步骤,它们需要不同的应用程序或工具。GCC 可用作编译器和链路器的智能驱动程序。这可让您对任何所需操作使用单个命令 gcc
。GCC 自动选择所需操作(编译和链接),以及它们的顺序:
- 源文件编译成对象文件。
- 对象文件和库链接(包括之前编译的源)。
可以运行 GCC 以便只发生第 1 步、只发生第 2 步或执行第 1 步和第 2 步。这由输入类型和请求的输出类型决定。
因为大型项目需要一个构建系统,它通常会为每个操作单独运行 GCC,因此始终将编译和链接视为两个不同的操作,即使 GCC 可以同时执行。