gcc编译的四个过程

5 篇文章 0 订阅
订阅专栏

gcc是什么?

GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc++、libgcj等等)。GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。

gcc编译的四个过程

gcc在执行编译工作的时,分为以下四个过程:
1.预处理,生成.i的文件
2.将预处理后的文件转换成汇编语言,生成.s文件
3.汇编变为目标代码(机器代码),生成.o的文件
4.连接目标代码,生成可执行程序

盗用一张图,图解过程如下:
在这里插入图片描述

这里我使用测试文件main.c来讲解gcc编译的四个过程

#include<stdio.h>
int main(void)
{
  //print hello world
  printf("Hello World\n");
  return 0;
}
1.预处理,生成main.i文件
gcc -E main.c -> main.i

在linux中,预处理后的文件以.i为后缀名,这个过程只激活预处理,不生成文件,因此你需要把它重定向到一个输出文件里 。
这一步的功能主要是宏的替换和注释的消除。

查看main.i文件
在这里插入图片描述

2.将预处理后的文件转换成汇编语言,生成.s文件
gcc -S main.c 

生成main.s文件,用编辑器打开查看
在这里插入图片描述

3.汇编变为目标代码(机器代码)生成.o的文件
gcc -c main.c 

在这里插入图片描述

4.连接目标代码,生成可执行程序
gcc main.o -o main

执行命令gcc main.o,默认生成a.out,这里我指定的是生成main执行文件,main与a.out是同文件不同名

查看main文件:
在这里插入图片描述

测试运行

生成的所有文件
在这里插入图片描述
执行结果:
./main
在这里插入图片描述

GCC编译过程解析
xiaowulang20082008的专栏
04-13 554
在编程过程中,我们经常会使用到GCC(或交叉编译链)来编译源代码,只有真正了解了GCC编译的具体过程, 才能理解编译的精髓。 通常我们将gcc编译流程分为以下四个步骤: 1、预处理(Pre-Processing) 2、编译(Compiling) 3、汇编(Assembling) 4、链接(Linking) 以helloworld.c为例子,通过以上四个步骤中可分别生成h
GCC编译流程分为了四个步骤:
mengxiangjia_linxi的博客
09-07 2413
GCC编译流程分为了四个步骤:1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o4.链接,生成可执行文件: Gcc hello.o –o hello 在
gcc编译四个过程详解
m0_61511416的博客
11-15 944
在linux中,预处理后的文件以.i为后缀名,这个过程只激活预处理,不生成文件,因此你需要把它重定向到一个输出文件里。执行命令gcc main.o,默认生成a.out,这里我指定的是生成main执行文件,main与a.out是同文件不同名。这里我使用测试文件main.c来讲解gcc编译四个过程。2.将预处理后的文件转换成汇编语言,生成.s文件。3.汇编变为目标代码(机器代码),生成.o的文件。生成main.s文件,用编辑器打开查看。1.预处理,生成.i的文件。查看main.i文件。
gcc编译过程
DRAXY的博客
04-05 1万+
gcc编译过程详细了解细节
gcc编译流程、参数实例详细(总结)
Luckiers的博客
04-04 2737
一、简介 本文主要讲解gcc命令的参数以及动态库和静态库的制作,通过程序的编译过程运行具体的实例进行阐述。 二、编译过程 GCC即GNU Compiler Collection,编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和链接(Linking),gcc可以理解为编译管理工具,它会具体调用相关的工具进行执行,具体如下图: 2.1预处理 [root@localhost /]# gcc -E test.c -o t
GCC编译环境配置(VSCode).pdf
09-28
GCC 是一个广泛使用的编译器,用于将 C/C++ 代码编译成可执行文件。 描述: GCC 编译环境配置(VSCode)是指在 VSCode 中配置 GCC 编译环境,以便进行 C/C++ 编程和调试。该配置过程包括下载和安装 VSCode、插件、...
gcc编译过程
01-03
本篇主要聚焦于GCC编译过程,这是一个将源代码转换为可执行程序的过程,主要包括四个主要步骤:预处理、编译、汇编和链接。 1. **预处理**: 预处理是GCC的第一步,通过`gcc -E`或`cpp`命令执行。在这个阶段,...
GCC 编译c程序的方法及过程解析
01-01
目前 Linux 下最常用的 C 语言编译器是 GCC ( GNU Compiler Collection ),它是 GNU 项目中符合 ANSI C 标准的编译系统,能够编译用 C 、 C++ 和 Object C 等...在使用 GCC 编译程序时,编译过程可以被细分为四个阶段
gcc编译及调试
05-25
gcc编译及调试是指使用GNU C编译器(GCC)对C语言程序进行编译和调试的过程。在Linux操作系统中,GCC是最常用的C编译器。 一、什么是C语言? C语言是一种在UNIX操作系统早期就被广泛使用的通用编程语言。它最早是...
LINUX下的GCC编译指南
12-29
GCC 编译指南的编译过程可以分为四个阶段:预处理、编译、汇编、连接。 * 预处理阶段:在这个阶段,编译器对源代码进行预处理,包括宏展开、头文件包含等。 * 编译阶段:在这个阶段,编译器将预处理后的代码编译成...
GCC编译的4个阶段
start_mao的博客
12-12 5271
GCC编译一共有4个阶段:预处理、编译、汇编、链接。 gcc指令的一般格式 gcc [选项] 要编译的文件 [选项] [输出文件] 选项 说明 -E 预处理源文件 -S 编译为汇编代码 -c 编译为目标文件 -o outfile 指定输出文件的文件名 eg:下面是一段很简单的hello.c代码,以这段代码为例。 #include <stdio.h> #define NAME "mao" void main(){ printf("hello:%s\n",NAME
gcc 工作流程中的4个阶段(预处理、编译和优化、汇编和链接)
cnjhk2012的博客
09-11 1578
GCC 编译器对程序的编译下图所示,分为 4 个阶段:预处理(预编译)、编译和优化、汇编和链接。链接:这个阶段需要 GCC 调用链接器对程序需要调用的库进行链接,最终得到一个可执行的二进制文件。第四步:将得到的二进制文件和标准库进制链接,得到可执行的二进制文件,不需要任何参数。汇编:这个阶段需要 GCC 调用汇编器对文件进行汇编,最终得到一个二进制文件。编译:这个阶段需要 GCC 调用编译器对文件进行编译,最终得到一个汇编文件。第三步:对得到的汇编文件进行汇编,需要使用的 gcc 参数为 -c。
C++源文件从文本到可执行文件经历的过程
07-28 137
1、预处理 源代码文件中头文件、宏定义等进行分析,生成预编译文件 预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。 编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件 汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件 链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件 转载...
1.2 GCC 编译四步骤
weixin_43306271的博客
12-20 408
一、总概述图 gcc -E xxx.c -o xxx.i 二、
linux中用gcc编译源代码的四个步骤(转载)
shijiemoxing的专栏
10-11 1万+
在Linux下进行C语言编程,必然要采用GNU GCC编译C源代码生成可执行程序。 一、GCC快速入门 Gcc指令的一般格式为:Gcc [选项] 要编译的文件 [选项] [目标文件] 其中,目标文件可缺省,Gcc默认生成可执行的文件名为:a.out 然后输入./a.
gcc详细编译过程
qq_46359697的博客
02-06 4147
GCC详细编译过程
C语言真正的编译过程
weixin_30455023的博客
07-24 1506
说实话,很多人做了很久的C/C++,也用了很多IDE,但是对于可执行程序的底层生成一片茫然,这无疑是一种悲哀,可以想象到大公司面试正好被问到这样的问题,有多悲催不言而喻,这里正由于换工作的缘故,所以打算系统的把之前用到的C/C++补一补。这里权且当做抛砖引玉,大神飘过。 【总述】 从一个源文件(.c)到可执行程序到底经历了哪几步,我想大多数的人都知道,到时到底每一步都做了什么,我估计也没多少人...
gcc 命令详解及最佳实践
热门推荐
人人都懂物联网
06-12 2万+
介绍 GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。 GCC 原名为 GNU C语言编译器,因为它原本只能处理 C 语言,但如今的 GCC 不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。 编译过程 GC
linux命令 gcc编译
最新发布
09-27
它的工作流程包括预处理、编译、汇编和链接四个阶段。在预处理阶段,gcc会展开头文件、进行宏替换和注释过滤等操作,生成预处理后的文件。在编译阶段,gcc将预处理后的文件编译成汇编文件。在汇编阶段,gcc将汇编...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
81
原创
141
点赞
265
收藏
25
粉丝
关注
私信
写文章

分类专栏

  • Redis
  • Hadoop 7篇
  • ssm
  • Java 12篇
  • Java SE 1篇
  • Java基础
  • IntelliJ IDEA 2篇
  • SpringBoot 1篇
  • sublime 1篇
  • Idea
  • 排序算法 1篇
  • MySQL 5篇
  • Linux 8篇
  • Java Web 5篇
  • Hexo 8篇
  • Tomcat 8篇
  • Maven 8篇
  • Nginx 1篇
  • Spring 4篇
  • HTTP 4篇
  • Git 5篇
  • Gitalk 2篇
  • Hibernate 2篇
  • Python 1篇
  • 运维 3篇
  • Oracle 1篇
  • C/C++ 5篇
  • WeChat 1篇

最新评论

  • Hadoop运行环境搭建

    2302_78940532: 你好,资源失效了,可以再发一个吗?

  • Hadoop运行环境搭建

    2301_77999961: hallo您好,我以后会涉及这个,预算七千到一万,想问下有没有处理器好,CPU也挺好的本子推荐

  • 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap

    Spade_K7: 为什么我还是不行啊,代码也没错,我run前也ctrl+S保存了,而且我原设置就是楼主展现出来的那样表情包

  • 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap

    m0_67790522: 为什么还不行555

  • 错误: 在类中找不到 main 方法, 请将 main 方法定义为:public static void main(String[] args)否则 JavaFX 应用程序类必须扩展javafx.ap

    m0_62547355: 解决了吗,我同样的表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Exception in thread main javax.imageio.IIOException: Cant read input file!
  • failed to load class org.slf4j.impl.StaticLoggerBinder
  • Centos7安装Redis
2020年16篇
2019年61篇
2018年20篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源商店起名大全免费吗关于酒起名商标起名是否近似的标准邓中夏简介养殖农庄起名大全与时俱进的意思1英里等于多少米集团企业名称咋起名男孩起名字安楚云乔梦舒的小说怎么五行起名庚子年出生孩子起名恩字起名字小石城山记陈博男孩起名fatezero第二季男孩用毓字起名好不好厕所穿越记用诗词起的名字鼠年起个什么名字好马年女孩起名大全2014周易起集团名字有慕字的女孩起名给树起名字好繁字起名什么好好意义的起名成语电脑耳机没声音怎么设置起名大全昕字的含义姓张女孩子起名高分姓史的女生起名大全淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化