C语言 gcc 编译程序

C语言 gcc 编译程序

  上篇博客写到了 编写HelloWorld,不管是通过IDE还是记事本最终的验证结果还是需要运行程序来核验,C语言在编写完成后需要通过gcc编译成可执行程序来进行使用,下面我会进行说明。

C语言 编译过程

一、C程序编译步骤

C代码编译成可执行程序经过4步:

1)预处理:宏定义展开、头文件展开、条件编译等,同时将代码中的注释删除,这里并不会检查语法

2)编译:检查语法,将预处理后文件编译生成汇编文件

3)汇编:将汇编文件生成目标文件(二进制文件)

4)链接:C语言写的程序是需要依赖各种库的,所以编译之后还需要把库链接到最终的可执行程序中去

通过 gcc 编译程序

一、编译程序

1) 分步编译、(手动编译经过每次步骤)

  • 预处理:gcc -E hello.c -o hello.i
  • 编  译:gcc -S hello.i -o hello.s
  • 汇  编:gcc -c hello.s -o hello.o
  • 链  接:gcc hello.o -o hello.exe

2)一步编译、(还是经过:预处理、编译、汇编、链接的过程):

  • gcc -o demo.exe hello.c

二、gcc 使用参数、后缀含义


选项


含义


-o file


指定生成的输出文件名为file


-E


只进行预处理


-S(大写)


只进行预处理和编译


-c(小写)


只进行预处理、编译和汇编


文件后缀


含义


.c


C 语言文件


.i


预处理后的 C 语言文件


.s


编译后的汇编文件


.o


编译后的目标文件

原文地址:https://www.cnblogs.com/xiangsikai/p/12368215.html

时间: 2024-10-17 16:31:42

C语言 gcc 编译程序的相关文章

gcc编译程序的流程

>>gcc编译器 gcc编译器:(C语言的编译器gcc/g++) gcc编译程序的流程 源文件(.c)——>预处理(.i)——>编译——>汇编(.s)——>链接(.o)——>可执行文件 (filename.c)    (预处理器)(编译器)(汇编器) (连接器)  (excutefile) 编译运行五部曲:(一般就三步:对c文件直接编译后直接生成可执行文件后运行 gcc bcard.c    gcc -o bcard bcard.c     ./bcard -c,

万年历算法的实现(C语言--gcc编译)

/** cal.c * * 现行的格里历是从儒略历演化而来的.儒略历每4年一个润年,润年366天,平年365天.* 如果从公元1年算的话,那么凡是能够被4整除的都是润年.从天文角度看,儒略历这种 * 历法是有误差的,到16世纪误差已经达到了10天.1582年,罗马教皇对儒略历进行了 * 一次校定,该年的10-5到10-14这10天被抹掉,并规定凡不能被400整除的世纪年不再 * 算为润年,校定之后的儒略历即为现行的格里历. * * 但是英国直到1752年才开始使用格里历,此时时间误差已经达到了1

linux GCC编译程序的过程

使用gcc编译程序时,编译过程可以细分为四个阶段: 预处理 预处理过程读入程序源代码,检查包含预处理指令的语句和宏定义,并对源代码进行相应的转换.预处理过程会删除程序中的注释和多余的空白字符. 编译 编译阶段中,gcc首先检查代码的规范性,是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言. 汇编 汇编阶段是把在编译阶段产生的汇编文件转成目标代码. 链接 将编译输出的文件链接成最终可执行的二进制文件 如图: 示例: vi hello.c #include <s

ubuntu下 GCC编译程序出现 undefined reference to `std::ios_base::Init::Init()&#39;问题

网上的解释是:“ you need to add -lstdc++, or use 'g++' rather than 'gcc' as your driver program.”,也就是说如果想要使用g++编译程序的话,那么链接时需要添加“-Istdc++”. 我试了一下 , 在链接时加上"-Istdc++",就没有问题了. 关于g++,让我想起了,在ubuntu下一开始安装完code::blocks的时候,提示需要安装g++.原来code::blocks内置编译器使用的是g++,但

1 C语言 gcc 介绍 C 语言编译 main接受参数

1         第一个c语言的hello world 1.1      include头文件包含 头文件包含,写法#include<文件名>, 1.2      main函数 这个就是C语言程序的入口,所有的C程序都是从main开始执行,一个C的源程序必须有一个main函数,也只能有一个main函数 1.3      注释 //注释一行 /* */代表块注释,可以注释多行代码 1.4      {}括号和代码块 代表一个代码单元 1.5      声明 C语言规定,所有的变量和函数必须先声

减小Gcc编译程序的体积

众所周知,Gcc编译的原始程序一般很大,其实有几种方法能大大减小目标代码的体积,一般有以下几种方法. 基本知识来源:http://www.mingw.org/wiki/Large_executables 1.禁用调试信息 Release编译时不要加上-g开关. 2.使用-Os编译程序. 不要使用-funroll-loops等可以加速程序执行但是会大大增加目标代码体积的开关. 3.编译后的程序使用strip去除符号和偏移(限于可执行程序和共享库,其他易出问题). 4.如果你不需要RTTI,编译时加

GCC编译器原理(一)------交叉编译器制作和GCC组件及命令

1.1 交叉编译器制作 默认安装的 GCC 编译系统所产生的代码适用于本机,即运行 GCC 的机器,但也可将 GCC 安装成能够生成其他的机器代码.安装一些必须的模块,就可产生多种目标机器代码,而且可通过命令行选择一种希望使用的代码. 1.1.1 目标机 从网站 http://gcc.gnu.org/install/specific.html 可以得到有可能的最新目标机列表.在此站点中可找到更新过的目标机列表,以及向各种目标机进行移植的最新信息.关于每种可能的目标机都有一个简短介绍,可以查找说明

C语言 运维之路

C语言 运维之路 1.C语言 介绍 2.C语言 HelloWorld 模板 3.C语言 gcc 编译程序 4.C语言 多文件编程 5.C语言 进制 6.C语言 数据存储方式 7.C语言 数据类型 8.C语言 有符号.无符号 9.C语言 汇编了解 10.C语言 字符串  11.C语言 strcpy  功能:把src所指向的字符串复制到dest所指向的空间中 12.C语言 strncpy   功能:把src指向字符串的前n个字符复制到dest所指向的空间中 13.C语言 strcat   功能:将s

Ubuntu下用glade和GTK+开发C语言界面程序(二)——gcc常用命令介绍

谈到linux,没人不懂gcc,当然,学过C语言的都该知道gcc,毕竟所有的类C编译器基本都有gcc来构成. GCC的意思随着时间的发展也从最初的GNU C Compiler发展到GNU Compiler Collection,也就是GNU编译器的统称集合.GCC对与操作系统与硬件的的支持,可以说是:无处不在. 一.gcc编译过程 GCC的编译过程要分为四个阶段来进行:预处理阶段,编译阶段,汇编阶段,以及链接阶段. 1.预处理阶段(也称预编译阶段) gcc -E helloworld.c -o