第 15 章 使用 GCC 构建代码


本章论述了源代码必须转换为可执行代码的情况。

15.1. Code Forms 之间的关系

先决条件

  • 了解编译和链接的概念

可能的代码表单

使用 C 和 C++ 语言时,有三种类型的代码:

  • 使用 C 或 C++ 语言编写的源代码,以纯文本文件形式存在。

    文件通常使用扩展名,如 .c,.cc,.cpp,.h,.hpp,.i,.inc。有关支持的扩展及其解释的完整列表,请查看 gcc 手册页:

    $ man gcc
  • 对象代码,通过使用 编译器 编译 源代码来创建。这是一种中间形式。

    对象代码文件使用 .o 扩展名。

  • 可执行代码,通过带有一个 linkerlinking 对象代码来创建。

    Linux 应用程序可执行文件不使用任何文件名扩展名。共享对象(library)可执行文件使用 .so 文件名扩展名。

注意

也存在用于静态链接的库存档文件。这是使用 .a 文件名扩展名的对象代码变体。不建议使用静态链接。请参阅 第 16.2 节 “静态和动态链接”

在 GCC 中处理代码表单

从源代码生成可执行代码需要两个步骤,它们需要不同的应用程序或工具。GCC 可用作编译器和链路器的智能驱动程序。这可让您对任何所需操作使用单个命令 gcc。GCC 自动选择所需操作(编译和链接),以及它们的顺序:

  1. 源文件编译成对象文件。
  2. 对象文件和库链接(包括之前编译的源)。

可以运行 GCC 以便只发生第 1 步、只发生第 2 步或执行第 1 步和第 2 步。这由输入类型和请求的输出类型决定。

因为大型项目需要一个构建系统,它通常会为每个操作单独运行 GCC,因此始终将编译和链接视为两个不同的操作,即使 GCC 可以同时执行。

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.