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

    文章

    1615

    浏览量

    49007
  • 汇编器
    +关注

    关注

    0

    文章

    31

    浏览量

    11226
  • Test
    +关注

    关注

    0

    文章

    80

    浏览量

    26928
收藏 人收藏

    评论

    相关推荐

    C7000优化C/C++编译器

    电子发烧友网站提供《C7000优化C/C++编译器.pdf》资料免费下载
    发表于 10-30 09:45 0次下载
    C7000优化C/C++<b class='flag-5'>编译器</b>

    Keil编译器优化方法

    我们都知道,代码是可以通过编译器优化的,有的时候,为了提高运行速度或者减少代码尺寸,会开启优化选项。
    的头像 发表于 10-23 16:35 225次阅读
    Keil<b class='flag-5'>编译器</b>优化方法

    嵌入式学习-常用编辑之GCC编译器

    、GCC编译过程GCC编译器编译过程要经过预处理编译,汇编,链接等4步才能够生成可执行文件
    发表于 08-27 10:17

    常用编辑之GCC编译器

    hello.c -o hello.i我们使用vim hello.i命令可以看到预处理文件有将近800行,预处理过程一个不到10行的代码,
    发表于 08-24 11:05

    AI编译器技术剖析

    随着人工智能技术的飞速发展,AI编译器作为一种新兴的编译技术逐渐进入人们的视野。AI编译器不仅具备传统编译器的功能,如高级语言编写的源代码
    的头像 发表于 07-17 18:28 1393次阅读

    人工智能编译器与传统编译器的区别

    人工智能编译器(AI编译器)与传统编译器在多个方面存在显著的差异。这些差异主要体现在设计目标、功能特性、优化策略、适用范围以及技术复杂性等方面。以下是对两者区别的详细探讨,旨在全面解析其内在差异。
    的头像 发表于 07-17 18:19 1590次阅读

    Meta发布基于Code Llama的LLM编译器

    近日,科技巨头Meta在其X平台上正式宣布推出了一款革命性的LLM编译器,这一模型家族基于Meta Code Llama构建,并融合了先进的代码优化和编译器功能。LLM编译器的推出,标志着Meta在人工智能领域的又一重大突破,将
    的头像 发表于 06-29 17:54 1419次阅读

    C预处理器及其工作原理

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

    QT开发学习笔记1(安装交叉编译器

    QT安装交叉编译器
    的头像 发表于 02-18 10:02 829次阅读
    QT开发学习笔记1(安装交叉<b class='flag-5'>编译器</b>)

    Triton编译器的原理和性能

    为Torch inductor的基本组件,以合成针对GPU的高效内核。与传统库使用相比,这具有多种优势。它允许创建各种各样的融合,它可以独立调整,并且它的内存占用更小。本次演讲介绍Triton编译器,并描述使其能够以最少的用户努力生成闪电般快速内核的过程。
    的头像 发表于 12-16 11:22 2612次阅读
    Triton<b class='flag-5'>编译器</b>的原理和性能

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

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

    TVM编译器的整体架构和基本方法

    有将近两个月没有学习一些新东西,更新一下博客了。一直在忙公司的一个项目,是做一款支持LSTM和RNN的通用架构加速IP。自己恰好负责指令编译工作,虽然开始的指令比较粗糙,没有一套完整的编译器架构
    的头像 发表于 11-30 09:36 2186次阅读
    TVM<b class='flag-5'>编译器</b>的整体架构和基本方法

    为什么C语言要进行编译

    为什么我们编写的C语言要进行编译?什么是编译编译时发生了什么? 机器无法理解我们编写的C语言,而编译就是面向人类的高级语言转换成为面向机
    的头像 发表于 11-24 15:47 1191次阅读
    为什么C语言要进行<b class='flag-5'>编译</b>

    编译器的优化选项

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

    C程序的完整编译过程

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