GCC编译流程及常用编辑命令
GCC 编译器在编译一个C语言程序时需要经过以下 4 步:
- 将C语言源程序预处理,生成
.i文件。 - 预处理后的.i文件编译成为汇编语言,生成
.s文件。 - 将汇编语言文件经过汇编,生成目标文件
.o文件。 - 将各个模块的
.o文件链接起来生成一个可执行程序文件。
GCC 编译流程如下图所示:

.i文件、.s文件、.o文件可以认为是中间文件或临时文件,如果使用 GCC 一次性完成C语言程序的编译,那么只能看到最终的可执行文件,这些中间文件都是看不到的,因为 GCC 已经经它们删除了。
当然,可以使用 GCC 选项看到这些中间文件,下节我们会讲解 GCC 选项。
linux下使用gcc命令编译代码
gcc命令提供了非常多的命令选项,但并不是所有都要熟悉.初学时掌握几个常用的就可以了,到后面再慢慢学习其他命令选项.
一,常用编译命令选项
假设源程序文件名为test.c
1.无选项编译链接
用法: #gcc test.c
作用: 将test.c预处理 汇编 编译 并链接形成可执行文件。这里未指定输出文件,默认输出为a.out 编译成功后可以看到生成了一个a.out的文件.在命令行输入./aout 执行程序 。 ./表示在当前目录, a.out为可执行程序文件名
2.选项 -o
用法: #gcc test.c -o test
作用: 将test.c预处理 汇编 编译并链接形成可执行文件test 。 -o选项用来指定输出文件的文件名。输入./test执行程序
3.选项 -E
用法: #gcc -E test.c -o test.i
作用: 将test.c 预处理输出test.i 文件
4.选项 -S
用法: #gcc -S test.i
作用: 将汇编输出文件test.i 汇编成 test.s 文件
5.选项 -c
用法: #gcc -c test.s 编译输出 test.o 文件
6.选项 -0
用法: #gcc -01 test.c -o test
作用: 使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,单编译时间越长,输出./test执行程序
二 多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c 和 testfun.c]
1.多个文件一起编译
用法: #gcc testfunc.c test.c -o test
作用: 将testfun.c 和test.c 分别编译后 链接成 test可执行文件.
2.分别编译各个源文件,之后对编译后输出的目标文件链接
用法: #gcc -c testfunc.c //将testfun.c 编译成testfun.o
#gcc -c test.c //将test.c 编译成 test.o
#gcc -o testfunc.o test.o -o test //将testfun.o和test.o 链接成 test
以上两种方法比较,第一种方法编译是需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译.
转: http://c.biancheng.net/view/663.html
https://wenku.baidu.com/view/7ae93b68a45177232f60a2c6.html
GCC编译流程及常用编辑命令的更多相关文章
- GCC编译流程浅析
GCC-GCC编译流程浅析 序言 对于大多数程序员而言,大家都知道gcc是什么,但是如果不接触到linux平台下的开发,鲜有人真正了解gcc的编译流程,因为windows+IDE的开发模式简直是一条龙 ...
- GCC 编译流程简介
GCC-GCC编译流程 序言 对于大多数程序员而言,大家都知道gcc是什么,但是如果不接触到linux平台下的开发,鲜有人真正了解gcc的编译流程,因为windows+IDE的开发模式简直是一条龙全套 ...
- gcc编译流程
gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 以hello.c为例子,在这四个步骤中 ...
- 和菜鸟一起学c之gcc编译过程及其常用编译选项【转】
转自:http://blog.csdn.net/eastmoon502136/article/details/8162626 版权声明:本文为博主东月之神原创文章,未经博主允许不得转载. 上篇文章,知 ...
- vi 常用编辑命令
什么是vi: vi是Linux/Unix底下最常用的文本编辑器,可以理解为和Windows下的txt一样,咱们一般操作linux服务器的时候都是没有图形化界面的, 怎么移动光标,到哪个位置,替换修改什 ...
- gcc 编译流程分析
//test.c #include<stdio.h> int main() { ,y=; printf("x=%d y=%d\n",x,y); ; } 1:预处理阶段, ...
- 面试题----gcc的编译流程
gcc编译流程 一. 编译与处理指令: gcc -E hello.c -o a.c 如果不使用-o指定输出的文件,会默认输出到终端.所以建议使用同时使用-o选项. 还要注意:编译时会保留#pra ...
- EDKII Build Process:EDKII项目源码的配置、编译流程[三]
<EDKII Build Process:EDKII项目源码的配置.编译流程[3]>博文目录: 3. EDKII Build Process(EDKII项目源码的配置.编译流程) -> ...
- gcc编译代码报错及编译方式
一.error: 'for' loop initial declarations are only allowed in C99 mode 前段时间写了一个小C程序,放在linux下用gcc编译出错, ...
随机推荐
- DB2检查数据在各节点分布情况
情景:总所周知,DB2的表空间(数据)在节点中存储是根据每张表的分区键来分布的,如果分区键建的不好,会直接导致表空间在各节点的占用大小不均匀,久而久之,其中一个或几个节点的大小已所剩无几,其他的却依旧 ...
- unittest 运行slenium(三)---通过数据驱动形式运行用例
一: 获取数据 获取用例所在位置,通过OpenExcelPandas来读取用例里面的全部数据.通过某个列名来创建新的序号. 并将结果转换成list类型,将其作为ddt数据的来源. 1. 在test文 ...
- Python标准库3.4.3-urllib.request-21.6
21.6. urllib.request — Extensible library for opening URLs 翻译:Z.F. The urllib.request module defines ...
- Gitlab-CI +Docker + Docker-Compose构建可持续集成java项目的镜像
先注册好Runner: https://www.cnblogs.com/zsifan/p/11714788.html 以及搭建Java和Maven环境: https://www.cnblogs.com ...
- 基于CentOS设置和使用Yum软件仓库
参考:How To Set Up and Use Yum Repositories on a CentOS 6 VPS 参考:CentOS yum 源的配置与使用 介绍 Yum仓库是Linux软件仓库 ...
- 【OF框架】框架Cache/Session在负载均衡部署时,切换Memory/Redis测试
一.切换Memory/Redis 第一步:安装运行Redis服务,获得连接参数. 第二步:在appsettings.json中配置 EnableRedisCache 和 Redisconnection ...
- java基础(5)---内存分配
一.内存分配 如: 先写下面的源代码: 如果继续写:
- centos 下 sphinx安装和配置
一.安装前提必备先安装工具 yum -y install make gcc g++ gcc-c++ libtool autoconf automake imake mysql-devel libxml ...
- 通用编程语言 Dragon
Dragon 是一种创新和实用的通用语言.所支持的编程范例是命令式的.过程式的.面向对象的.使用嵌套结构的声明式的.该语言是可移植的(Windows.Linux.macOS.Android等),可用于 ...
- emit传多个参数
https://blog.csdn.net/lxy123456780/article/details/87811113 子组件: this.$emit('closeChange',false,true ...