首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

gcc常用命令_C语言编译过程几个步骤

常用选项 一个c文件要经过如下处理才能变成可执行文件 Step1:预编译 gcc -E -o hello.i hello.c Step2:编译 gcc -S -o hello.s...下面看下每一步生成文件长什么样 Step1:预编译 gcc -E -o hello.i hello.c 可以看到最后把宏展开,头文件加入等 Step2:编译 gcc -S -o hello.s...hello.i 可以看到编程了汇编语言 Step3:汇编 gcc -c -o hello.o hello.s 变成了而二进制文件 Step4:链接 gcc -o hello hello.o...最后文件就是再该平台上可执行文件(我这里取名了个sh后缀) 一步到位的话 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

54120

C语言笔记】C语言编译过程

下面以windows环境下test.c为例,test.c代码为: #include int main(void) { printf("This is a test program...如图,编译生成可执行文件过程实际包含四个过程:(1)预处理;(2)编译;(3)汇编;(4)链接。...2、预处理(Preprpcessing) 使用预处理器把源文件test.c经过预处理生成test.i文件,预处理用于将所有的#include头文件以及宏定义替换成其真正内容。...预处理命令为: gcc -E test.c -o test.i 上述命令中-E是让编译器在预处理之后就退出,不进行后续编译过程;-o是指定输出文件名。 预处理之后得到仍然是文本文件。...汇编过程命令为: gcc -c test.s -o test.o 上述命令中-c、-o让汇编器把汇编文件test.s转换成目标文件test.o。

12.2K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C语言编译过程

    如果用一张图来表示: image.png 编译编译程序读取源程序(字符流),对之进行词法和语法分析,将高级语言指令转换为功能等效汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式要求链接生成可执行程序...C源程序头文件-->预编译处理(cpp)-->编译程序本身-->优化程序-->汇编程序-->链接程序-->可执行文件 1.编译预处理 读取c源程序,对其中伪指令(以#开头指令)和特殊符号进行处理 [...例如在源程序中出现LINE标识将被解释为当前行号(十进制数),FILE则被解释为当前被编译C源程序名称。预编译程序对于在源程序中出现这些串将用合适值进行替换。...如数字、字符串、变量定义,以及C语言关键字,如main,if,else,for,while,{,},+,-,*,\,等等。...对于被翻译系统处理每一个C语言源程序,都将最终经过这一处理而得到相应目标文件。目标文件中所存放也就是与源程序等效目标的机器语言代码。 目标文件由段组成。

    1.9K20

    叙述 C语言编译

    @(C语言)[code] 用一段简单代码,探讨下从C代码到最终可执行文件编译过程,追根究底。 偶尔了解下底层,也就没那么多莫名其妙了。...个人开发环境 ubuntu 14.04 ---- 编译作用 相比python,lua等脚本语言解释执行方式,编译C是为了提高程序运行效率。...把对用户友好语言文本编译成对机器友好特定指令直接执行,而不是执行时一条一条通过解释器解析执行,很大地提高了执行效率。对应C主要用于底层,系统层次,追求高性能表现,亦或者,平台资源限制。...编译过程 gcc 编译流程分为四个步骤: 计算机系统设计基本原则:层次化和抽象。 ? 编译flow 编写一个最简单程序 hello.c,以此为例,看看各个过程做了什么事情。...汇编(Assembling) 这一步骤相对简单,将汇编代码转换为对应机器执行指令,由于这一步丢失信息很少,所以可以通过反汇编把机器码还原为汇编代码,但是再进一步还原到高级语言就不可能了。

    1.7K11

    C语言编译过程

    处理条件预编译 #if, #ifdef, #if, #elif,#endif 处理“#include”预编译指令,将包含“.h”文件插入对应位置。这可是递归进行,文件内可能包含其他“.h”文件。...用于显示调试信息:错误或警告位置。 保留#pragma编译器指令。(1)设定编译器状态,(2)指示编译器完成一些特定动作。...代表接下来文本应该被当做包含一个隐式extern "C编译 1.高级语言->汇编代码 命令 gcc -S a.i -o a.s .file "a.c" .globl _...链接 使用到了C标准库东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,将翻译成二进制与需要用到库绑定在一块。...动态库与之相反,在编译链接时并没有把库文件代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统开销。

    1.9K20

    C语言】预编译

    _CSDN博客  系列专栏-【C】系列_謓泽博客-CSDN博客 ✉️我们并非登上我们所选择舞台,演出并非我们所选择剧本 目录 write in front    预定义符号  日志 条件编译 ...__LINE__:表示文件当前行号。 __DATE__:表示文件被编译日期。 __TIME__:表示文件被编译时间。...条件编译 条件编译一句话:满足条件就编译,不满足条件就不编译。 在编译一个程序时候,我们如果将一条语句或者是一组语句编译再或者是放弃是非常方便。因为我们有条件编译指令。...C ​ 常见条件编译指令 #if指令 该指令检测表达式值是否为真。...⒊条件编译在哪些地方使用? 通常用于中大型项目当中会使用到条件编译以及版本之间维护(某某软件完全版和精简版)当然条件编译还可以完成一些其它事情。 ★结论⇢条件编译本质是对代码进行裁剪。

    86810

    C语言系列】C语言编译流程分析

    前几天看了《程序员自我修养——链接、装载与库》中第二章“编译和链接”,主要根据其中内容简单总结一下C程序编译过程吧。...\n”); return 0; } 通常我们使用gcc来生成可执行程序,命令为:gcc hello.c,默认生成可执行文件a.out 其实编译(包括链接)命令:gcc hello.c 可分解为如下4...个大步骤: 预处理(Preprocessing) 编译(Compilation) 汇编(Assembly) 链接(Linking) ?...$gcc –S hello.i –o hello.s 或者 $ /usr/lib/gcc/i486-linux-gnu/4.4/cc1 hello.c 注:现在版本GCC把预处理和编译两个步骤合成一个步骤...gcc其实是后台程序一些包装,根据不同参数去调用其他实际处理程序,比如:预编译编译程序cc1、汇编器as、连接器ld 可以看到编译汇编代码(hello.s)如下: .file "hello.c

    10.9K51

    1.3 运行C语言程序步骤

    01上机输入和编译源代码  通过键盘向计算机输入程序,如发现有错误,要及时改正。最后将此源程序以文件形式存放在自己指定文件夹内,文件用.c作为后缀。...02对源程序进行编译 先用C编译系统提供“预处理器”对程序 中预处理指令进行编译预处理。在用编译系统对源程序进行编译时,自动包括了预编译和正式编译两个阶段,一气呵成。...03 进行连接处理 经过编译所得到二进制目标文件还不能供计算机直接使用,必须把所有的编译后得到目标模块连接装配起来,再与库函数形成一个整体,生成可执行程序。...04运行可执行程序  一个程序从编写到运行成功,并不是一次成功,往往要经过多次反复。而且即使是编写好程序也并不一定能保证正确无误。 更多案例可以go公众号:C语言入门到精通

    2.1K2927

    c语言编译器在线-c在线编译器(c语言在线编程)

    c编译器-c语言编译器是干什么用   本人不才,仅就个人意见谈谈:   1。...注意:API是你编译器提供,也就是说你可以直接用他,而不需要写很多底层代码了,如果要很明确说的话,就是一个应用程序接口需要很多底层代码才能写出,而在你使用C语言中只是一个语句而已,包括你写一个定义变量语句...c语言编译器哪个好?   g++,icc.   ...-c++ source file,在头部加上   #   #   然后就可以编译c语言了   C++编程软件   这个永远没有统一标准。   ...DEV C++:   他使用是目前信息学竞赛常使用C语言编译器 (gcc),软件本身很小,编译能力应该还行(本人用他不是很多,估计还不错),而且操作也是采用窗口,用起来也比较方便。

    6.9K50

    C语言编译和链接

    一、翻译环境和运行环境 在c语言实现中,存在两个环境 翻译环境:在这个环境中源代码被转换成可执行二进制指令 运行环境:实际执行代码 二、翻译环境 翻译由编译和链接两个过程组成 编译又可以分为预处理...、编译、汇编三个过程 一个c语言项目一般是由多个.c文件一起构建,多个.c文件通过如下步骤生成可执行程序: ①多个.c文件单独经过编译器,编译处理生成对应目标文件 ②多个目标文件和链接库一起经过链接器处理生成最终可执行程序...③处理 #include 预编译指令,将包含头文件内容插入到该预编译指令位置。...这个过程是递归进行,因为包含头文件可能包含其他文件 ④删除所有的注释 ⑤添加行号和文件名标识,方便后续编译器生成调试信息 ⑥保留所有的 #pragma 编译器指令,后续编译器会使用 经过预处理后...,它过程主要包括:地址和空间分配、符号决议、重定位等 重定位:当我们使用多个.c文件生成一个可执行程序时候,由于编译时候是每个文件单独编译,当我们在一个文件中使用另一个文件定义函数时,我们是需要明确地址

    7910

    C语言常用编译

    VC++ 6.0 这款软件相信大家看到名字就觉得很亲切,也是大家吐槽最多。中国大学计算机专业学习C语言必备神器,也算是比较古老C语言学习工具了。...不过我个人觉软件太大了,因为它功能太完善,除了编写C语言,还可以编写网页代码还有动态asp等等,如果你是做网站开发或者微软软件开发,可以使用这类软件,如果单纯只是学习C语言,那我们就不需要大材小用...C-Free中集成了C/C++代码解析器,能够实时解析代码,并且在编写过程中给出智能提示。C-Free提供了对目前业界主流C/C++编译支持,你可以在C-Free中轻松切换编译器。...C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。...确切说它是一款编译器,我们上面说很多集成开发环境都集成了这种编译器。如果我们直接使用这个编译器来编译我们C程序那么我们对C程序构建过程就会有深入了解。

    5.2K50

    c语言编译

    c语言编译器是一款涵盖丰富学习资料软件,用户可以在线一键学习辅导c语言编译器在线,可以满足用户学习需求,能够为用户带来优质服务,随时都可以在软件上学习各种有趣编程知识。   ...软件特色   1、资源丰富   用户可以在软件上找到丰富C语言教程,能够看到很多不同编程资源,轻松地去学习;   2、不断更新   软件上素材资源会不断地更新,可以让用户轻松地学习,能够在线学习到很多实用知识...;   3、满足需求   软件可以满足用户学习需求,通过软件就可以直接去软件中学习,能学到自己没学过;   4、功能完善   用户可以在线编译自己需要编译代码,支持编译多种不同编程语言,让学习更方便...软件优势   - 编译迅速,软件编译速度非常迅速,能够直接将编译完成代码放在眼前,轻松查看;   - 智能联想c语言编译器在线,拥有联想功能,可以帮助用户快速地输入常用语句,不输完整也会有完整词;...  - 没有广告,使用软件时候不会出现广告,能够轻松地使用,在软件上自由地编译学习。

    2.1K10

    解密C语言编译背后过程

    我们大部分程序员可能都是从C语言学起,写过几万行、几十万行、甚至上百万行代码,但是大家是否都清楚C语言编译完整过程呢,如果不清楚的话,我今天就带着大家一起来做个解密吧。...C语言相对于汇编语言是一种高级语言,要想在系统上运行,需要通过编译器把它转换成机器能够读懂可执行代码。...$gcc -save-temps hello.c –o hello $ls hello hello.c hello.i hello.o hello.s C编译编译过程主要分成四步: (1) 预处理...2)编译 Compiling 编译将 hello.i 文件编译生成一个中间文件 hello.s,打开可以看到里边都是汇编语言,所以编译作用就是把源代码转换成汇编语言。 ?...到这里 C完整编译流程就结束了,本文示例用是Linux操作系统,编译器用是 gcc,但在其他操作系统,比如 Unix、Windows,或者用其他编译器,原理都是一样,感兴趣同学可以去学习一下编译原理

    85230

    C语言】程序编译、预处理

    而源程序通过编译和链接最终形成可执行程序,但是编译本身也分为几个阶段:预编译/预处理——编译——汇编 预处理 选项 gcc -E test.c -o test.i 预处理完成之后就停下来,预处理之后产生结果都放在...编译选项 gcc -S test.c 编译完成之后就停下来,结果保存在test.s中。...__ //如果编译器遵循ANSI C,其值为1,否则未定义 这些预定义符号都是语言内置 int main() { int i = 0; FILE* pf = fopen("log.txt", "w...所以用于对数值表达式进行求值宏定义都应该用这种方式加上括号,避免在使用宏时由于参数中操作符或邻近操作符之间不可预料相互作用 #define 替换规则 在程序中扩展#define定义符号和宏时,需要涉及几个步骤...#和## 开始之前,我们可以想一个问题:如何把参数插入到字符串中❓ 我们要先理解一下,在C语言中,下面两句代码是能达到相同结果: #include int main() {

    25020

    C语言——Q编译和链接

    • 多个.c⽂件单独经过编译编译处理⽣产对应目标文件; • 注:在Windows环境下⽬标⽂件后缀是 .obj ,Linux环境下⽬标⽂件后缀是 .o ;...在 gcc 环境下想观察⼀下,对 test.c ⽂件预处理后.i⽂件,命令如下: gcc -E test.c -o test.i 预处理阶段主要处理那些源⽂件中#开始编译指令。...链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。 链接解决是⼀个项⽬中多⽂件、多模块之间互相调⽤问题。...test.c 经过编译器处理⽣成 test.o add.c 经过编译器处理⽣成 add.o 我们在 test.c ⽂件中使⽤了 add.c ⽂件中 Add 函数和 g_val 变量。...我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 时候必须确切知道 Add 和 g_val 地 址,但是由于每个⽂件是单独编译,在编译编译 test.c 时候并不知道 Add

    10310

    学习C语言编译选择

    来源:C语言网 很多初学C语言同学可能遇到首要问题,就是选择编译器,用什么编程软件?...笔者建议则是:如果你要学C语言,那么尽可能别用win8、win10这些太高级系统。为什么呢?答:因为越早越原生系统环境越适合学习C语言这样系统级语言。...如果想原汁原味学习C,那么Linux系任何编译器都可以。说白了就是让Windows系统下可以用gcc,原因和刚才一样,因为gcc更支持标准C。...部分同学觉着自己可以驾驭,那么建议考虑linux系CodeBlocks、DevC++等编译器,甚至直接使用linux系统学习C语言。VS系列则不建议初学者使用!...常见问题: TC编译器怎么样,可以吗? TC编译器是16位编译器,如果习惯的话,也是很建议使用c4droid编译器呢? c4droid编译器为手机端工具,适合没有电脑情况下模拟测试运行。

    2.4K60

    C语言程序编译和链接

    如果再把编译器展开成3个过程,那就变成了下⾯过程: 预处理(预编译) 在预处理阶段,源⽂件和头⽂件会被处理成为.i为后缀⽂件。...生成test.i文件 编译  放是汇编代码:(将.c文件转换为汇编代码) gcc -S test.i -o test.s 经过词法分析、语法分析、语义分析及优化,⽣成相应汇编代码⽂件。...链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。 链接解决是⼀个项⽬中多⽂件、多模块之间互相调⽤问题 如果名字写错 通过地址无法找到。...test.c 经过编译器处理⽣成 test.o  add.c 经过编译器处理⽣成add.o  我们在 test.c ⽂件中使⽤了 add.c ⽂件中 Add 函数和 g_val 变量。...我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 时候必须确切知道 Add 和 g_val 地 址,但是由于每个⽂件是单独编译,在编译编译 test.c 时候并不知道 Add

    10210

    学习C语言编译选择

    很多初学C语言同学可能遇到首要问题,就是选择编译器,用什么编程软件?...笔者建议则是:如果你要学C语言,那么尽可能别用win8、win10这些太高级系统。为什么呢?答:因为越早越原生系统环境越适合学习C语言这样系统级语言。...如果想原汁原味学习C,那么Linux系任何编译器都可以。说白了就是让Windows系统下可以用gcc,原因和刚才一样,因为gcc更支持标准C。...部分同学觉着自己可以驾驭,那么建议考虑linux系CodeBlocks、DevC++等编译器,甚至直接使用linux系统学习C语言。VS系列则不建议初学者使用!...常见问题: TC编译器怎么样,可以吗? TC编译器是16位编译器,如果习惯的话,也是很建议使用c4droid编译器呢? c4droid编译器为手机端工具,适合没有电脑情况下模拟测试运行。

    2.2K70
    领券