0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用编译器将预处理文件的编译的命令是什么?

GReq_mcu168 来源:玩转单片机 作者:玩转单片机 2020-06-24 11:49 次阅读

前言

如果你使用的是集成开发环境,那么你点击编译按钮就可生成可执行文件,然后点击运行即可运行。那么,你知道从源代码到可执行文件经历了哪些过程吗。仅仅是编译?

下面以windows环境下的test.c为例,test.c里的代码为:

#include 《stdio.h》 int main(void) { printf(“This is a test program! ”); return 0; }

其经历如下过程:

使用编译器将预处理文件的编译的命令是什么?

如图,编译生成可执行文件的过程实际包含四个过程:(1)预处理;(2)编译;(3)汇编;(4)链接。

预处理(Preprpcessing)

使用预处理器把源文件test.c经过预处理生成test.i文件,预处理用于将所有的#include头文件以及宏定义替换成其真正的内容。

预处理的命令为:

gcc -E test.c -o test.i

上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。

预处理之后得到的仍然是文本文件。test.i文件部分内容截图如下:

使用编译器将预处理文件的编译的命令是什么?

编译(Compilation)

使用编译器将预处理文件test.i编译成汇编文件test.s。

编译的命令为:

gcc -S test.i -o test.s

上述命令中-S让编译器在编译之后停止,不进行后续过程;-o是指定输出文件名。汇编文件test.s是文本文件,部分内容截图如下:

使用编译器将预处理文件的编译的命令是什么?

汇编(Assemble)

使用汇编器将汇编文件test.s转换成目标文件test.o。

汇编过程的命令为:

gcc -c test.s -o test.o

上述命令中-c、-o让汇编器把汇编文件test.s转换成目标文件test.o。目标文件test.o是二进制文件,部分内容截图如下:

使用编译器将预处理文件的编译的命令是什么?

链接(Linking)

链接过程使用链接器将该目标文件与其他目标文件、库文件、启动文件等链接起来生成可执行文件。

链接过程的命令为:

gcc test.o -o test.exe

综上,生成可执行程序过程为:预处理、编译、汇编、链接。各个命令如下图所示:

使用编译器将预处理文件的编译的命令是什么?

责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48627
  • 汇编器
    +关注

    关注

    0

    文章

    31

    浏览量

    11193
  • Test
    +关注

    关注

    0

    文章

    80

    浏览量

    26852
收藏 人收藏

    评论

    相关推荐

    C预处理器及其工作原理

    C预处理器(C Pre-Processor)也常简写为 CPP,是一个与 C 编译器独立的小程序,预编译器并不理解 C 语言语法,它仅是在程序源文件
    的头像 发表于 03-12 14:14 206次阅读
    C<b class='flag-5'>预处理</b>器及其工作原理

    C语言必备知识编译预处理

    编译预处理就是在编译源代码之前进行的一系列处理,将源程序中的一些特殊命令进行展开或处理,生成扩展
    的头像 发表于 12-01 18:27 738次阅读
    C语言必备知识<b class='flag-5'>编译</b><b class='flag-5'>预处理</b>

    为什么C语言要进行编译

    时主要分为了4个阶段,每个阶段的具体作用将在接下来进行介绍。 注:预处理中的cpp不是 c plus plus,而是c pre-process Part1预处理 命令:gcc -E hello.c -o hello.i
    的头像 发表于 11-24 15:47 456次阅读
    为什么C语言要进行<b class='flag-5'>编译</b>

    编译器的优化选项

    一个程序首先要保证正确性,在保证正确性的基础上,性能也是一个重要的考量。要编写高性能的程序,第一,必须选择合适的算法和数据结构;第二,应该编写编译器能够有效优化以转换成高效可执行代码的源代码,要做到
    的头像 发表于 11-24 15:37 412次阅读
    <b class='flag-5'>编译器</b>的优化选项

    C程序的完整编译过程

    本文讨论了C程序的完整编译过程,分别讲述了预处理编译、汇编、链接各阶段完成的编译任务。然后通过一个编译实例,探讨了各阶段输出的
    的头像 发表于 11-15 17:14 527次阅读
    C程序的完整<b class='flag-5'>编译</b>过程

    新版编译器的设计思路和优化方法

    小程序编译器在小程序开发、预览、发布各个阶段都需要使用,因此编译器性能会直接影响到开发者开发效率,也会影响到开发者工具的使用体验。 由于旧版的编译器(基于 webpack4)在构建大型项目时会很慢,内存占用也高,一直被开发者吐槽
    发表于 10-13 11:21 152次阅读
    新版<b class='flag-5'>编译器</b>的设计思路和优化方法

    Keil修改ARM编译器及配置方法

    Keil MDK自 V5.36 版本之后,默认就不带 Arm Compiler V5版本编译器。如果需要使用 V5 版本编译器,就需要自己下载并安装。
    发表于 09-19 10:41 2243次阅读
    Keil修改ARM<b class='flag-5'>编译器</b>及配置方法

    Linux 下GCC的编译

    一、Linux 下多文件编译 在上一篇 Linux 下的 C 编程我们知道了 Linux 下的编译器为 GCC ,以及如何使用 GCC 进行编译,在文章我们讲解 GCC 的
    的头像 发表于 09-11 15:18 1089次阅读
    Linux 下GCC的<b class='flag-5'>编译</b>

    Arm编译器嵌入式FuSa 6.16.2版LTS参考指南

    作为产品文档的文档处理。 2. 1 内嵌入 FUSa 工具的Armded FUSa 指令行语法缩写的 Arm.1 编译器 Amded FUSa 工具命令可以接受许多输入
    发表于 08-25 07:58

    ARM编译器5.06版ARMCC用户指南

    命令行使用armcc命令来调用编译器。 指定要编译的源文件,以及控制编译器行为所需的任何选项。
    发表于 08-12 07:15

    编译器的标准生命周期

    编译器的标准生命周期
    发表于 07-05 19:32 0次下载
    <b class='flag-5'>编译器</b>的标准生命周期

    Neuron 现场编译器用户指南

    Neuron 现场编译器用户指南
    发表于 07-04 20:47 0次下载
    Neuron 现场<b class='flag-5'>编译器</b>用户指南

    SDCC-Linux下的51 MCU编译器

    SDCC (小型设备C编译器)是为8位微控制器开发的免费C编译器。尽管兼容多种不同体系结构,但SDCC C编译器更适合8051内核。 SDCC是命令行固件开发工具,含
    的头像 发表于 06-16 15:19 3689次阅读

    编译器如何处理使用预编译库SMING文件编译的应用程序中未使用的库?

    编译的库文件,由位于顶部的应用程序使用。 编译器如何处理使用预编译库SMING文件
    发表于 06-12 08:54

    如何构建我自己的嵌入式C编译器

    只是为了获得如何构建我自己的嵌入式 C 编译器的知识,如预处理、汇编、链接、生成 Hex 文件、elf 文件、映射
    发表于 06-08 08:10