编译:当前源代码编译成二进制目标文件(.obj文件)

链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)。

一个现代编译器的主要工作流程如下:

源程序(source code)→预处理器(preprocessor)→编译器(compiler)→汇编程序(assembler)→目标程序(object code)→连接器(链接器,Linker)→可执行程序(executables)

执行过程 虽然我们称gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶

1.预处理(也称预编译,Preprocessing):命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。

2.编译(Compilation):接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。

3.汇编(Assembly):汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。

4.链接(Linking):当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到 的库函数也从各自所在的档案库中连到合适的地方。

实例:

1.编写.c文件如下:

#include

int main()

{

printf("This is my first c program in ubuntu");

return 0;

}

2.预编译过程:

gcc -E ./hello.c -o hello.i //.i 为后缀的文件,是已经预处理过的C源代码文件,可以省略这一步。

cat hellp.c | wc -l //查看hello.c文件内容的行数。

cat hellp.i | wc -l //查看hello.i文件内容的行数。

3.汇编过程:

gcc -S hello.i -o hello.s //.s为后缀的文件,是汇编语言源代码文件;可以省略这一步。

4.编译过程

gcc -c ./hello.c //在当前文件夹下生成hello.o .o为后缀的文件,是编译后的目标文件;

gcc -c hello.c -o hello.o //在当前文件夹下生成hello.o

5.链接过程:

gcc hello.o -o hello

6.直接把hello文件拖动到终端即可执行。

用g++编译c++源程序

用g++编译c++源程序和c语言类似,可将gcc改为g++逐个尝试。以下只提供一些简单介绍:

-E Preprocess only; do not compile, assemble or link

-S Compile only; do not assemble or link

-c Compile and assemble, but do not link

-o Place the output into

将如下c语言代码汇编成s文件,gcc编译c语言程序相关推荐

  1. 让C语言写图形库时不关闭控制台,GCC编译Win图形程序不显示控制台方法

    用VS编译openCV这些有控制台又有图形显示的程序,如果想隐藏控制台,只需要使用一行代码: #pragma comment( linker, "/subsystem:/"wind ...

  2. linux c语言编程内嵌汇编,gcc编译c语言中内嵌汇编

    gcc编译c语言中内嵌汇编 --AT&T and Intel 汇编语法对照 寄存器命名: AT&T:  %eax Intel: eax AT&T 语法源地址在左侧,目的地址在右 ...

  3. GCC 编译 C 语言文件

    GCC 编译 C 语言文件 题目要求 请编写一个主程序文件 main1.c 和一个子程序文件 sub1.c 要求:子程序sub1.c 包含一个算术运算函数 float x2x(int a,int b) ...

  4. gcc编译c语言多线程程序的步骤,GCC分步骤编译C语言程序

    上节<GCC编译C语言程序完整演示>讲解的是通过gcc命令一次性完成编译和链接的整个过程,这样最方便,大家在学习C语言的过程中一般都这么做.实际上,gcc命令也可以将编译和链接分开,每次只 ...

  5. c语言用指针实现日期输出,C语言指针实现链表以及用gcc编译输出

    C语言指针实现链表以及用gcc编译输出 C语言指针实现链表以及用gcc编译输出 代码写的链表实现创建,插入,删除的操作,很基础的一些动作. 可以本地用NotePad写好代码,然后通过Filezilla ...

  6. linux 编译C语言代码后产生OBJ文件的方法

    如果你不指定编译成什么文件,gcc默认一步到位,直接生成可执行文件你可以试试以下几个参数 -c 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件 例子用法: gcc -c hello.c 他 ...

  7. mp4文件时长 c++源码_【C语言】如何使用头文件 .h 编译 C 源码!so easy!

    在 C 语言中,头文件或包含文件通常是一个源代码文件,程序员使用编译器指令将头文件包含进其他源文件的开始(或头部),由编译器在处理另一个源文件时自动包含进来. 一个头文件一般包含类.子程序.变量和其他 ...

  8. linux如何用gcc编译c程序,Ubuntu之如何使用gcc编译C语言程序

    在大学里面大家都用过VC6.0来进行编程.VC6.0属于集成开发环境,一份代码从文本变成可执行的程序只需要在其中点击几个按钮就行了,加之老师也只教过我们如何操作,并未介绍C语言的执行过程.上一篇曾提到 ...

  9. centos 7使用gcc编译c语言,CentOS 7编译安装gcc 4.9.4

    1. 为什么要升级到gcc4.9.x呢? 因为最近在做的一个项目中要用C++11新特性,而在 g++ 4.9 之前,regex 库并不支持 ECMAScript 的正则语法,换句话说,在 g++4.9 ...

最新文章

  1. Python学习16 正则表达式3 练习题
  2. arm9重启ssh服务_部署ssh使用rsa登录配置
  3. 全球最大的披萨公司,在中国干不过必胜客?
  4. 22 CO配置-控制-产品成本控制-成本对象控制-检查制造订单 (PP) 的评估变式
  5. dbcp连接池配置详解_JDBC第四篇【数据库连接池、DbUtils框架、分页】(修订版)
  6. 转载 WHO OWNS THE MOST SERVERS ?
  7. Java面试锦囊送给你!大厂门槛随便跨!
  8. c++ 结构体中不同类型的初始值_不同类型结构的厂房效果图大盘点
  9. php ci的session和php session,php及codeigniter使用session-cookie的方法(详解)
  10. 封禁3年,微信重磅功能回归!
  11. 多核Cache一致性 伪共享 atomic的实现和cache相关的部分
  12. 桌面魔术可以用透明桌子揭密
  13. 【自然框架】之通用权限(三):组织结构表组
  14. java抽象工厂模式_java简单工厂模式和抽象工厂模式
  15. Finalize()、Dispose(bool disposing)和Dispose()的使用场景与对比
  16. php做个抽签人名,基于JS实现的随机数字抽签实例
  17. kvm安装Windows7旗舰版
  18. BSC Web3生态深度研究
  19. Classification分类学习
  20. JVM错误日志hs_err_pid****.log分析

热门文章

  1. mc服务器位置,我的世界1.5.2服务器地址大全 服务器介绍
  2. 安卓学习笔记:安卓11访问/读写 Android/data 目录
  3. 如何用股票分红接口获取信息?
  4. mysql 行级排它锁_Mysql的行级锁 -- 共享锁和排他锁
  5. Qt软键盘中/英文输入法
  6. 设计师必读的九本书_设计师必读:不要让我重新思考
  7. 判断集合和map是否为空
  8. 配置linux syslog服务器+配置syslog客户端
  9. elementUI 显示局部加载loading
  10. JAVA后端实习生刚进入公司一般会安排做什么?