GCC 编译器在编译一个C语言程序时需要经过以下 4 步:

  1. 将C语言源程序预处理,生成.i文件。
  2. 预处理后的.i文件编译成为汇编语言,生成.s文件。
  3. 将汇编语言文件经过汇编,生成目标文件.o文件。
  4. 将各个模块的.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编译流程及常用编辑命令的更多相关文章

  1. GCC编译流程浅析

    GCC-GCC编译流程浅析 序言 对于大多数程序员而言,大家都知道gcc是什么,但是如果不接触到linux平台下的开发,鲜有人真正了解gcc的编译流程,因为windows+IDE的开发模式简直是一条龙 ...

  2. GCC 编译流程简介

    GCC-GCC编译流程 序言 对于大多数程序员而言,大家都知道gcc是什么,但是如果不接触到linux平台下的开发,鲜有人真正了解gcc的编译流程,因为windows+IDE的开发模式简直是一条龙全套 ...

  3. gcc编译流程

    gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 以hello.c为例子,在这四个步骤中 ...

  4. 和菜鸟一起学c之gcc编译过程及其常用编译选项【转】

    转自:http://blog.csdn.net/eastmoon502136/article/details/8162626 版权声明:本文为博主东月之神原创文章,未经博主允许不得转载. 上篇文章,知 ...

  5. vi 常用编辑命令

    什么是vi: vi是Linux/Unix底下最常用的文本编辑器,可以理解为和Windows下的txt一样,咱们一般操作linux服务器的时候都是没有图形化界面的, 怎么移动光标,到哪个位置,替换修改什 ...

  6. gcc 编译流程分析

    //test.c #include<stdio.h> int main() { ,y=; printf("x=%d y=%d\n",x,y); ; } 1:预处理阶段, ...

  7. 面试题----gcc的编译流程

    gcc编译流程 一.    编译与处理指令: gcc -E hello.c -o a.c 如果不使用-o指定输出的文件,会默认输出到终端.所以建议使用同时使用-o选项. 还要注意:编译时会保留#pra ...

  8. EDKII Build Process:EDKII项目源码的配置、编译流程[三]

    <EDKII Build Process:EDKII项目源码的配置.编译流程[3]>博文目录: 3. EDKII Build Process(EDKII项目源码的配置.编译流程) -> ...

  9. gcc编译代码报错及编译方式

    一.error: 'for' loop initial declarations are only allowed in C99 mode 前段时间写了一个小C程序,放在linux下用gcc编译出错, ...

随机推荐

  1. Android笔记(八) Android中的布局——相对布局

    RelativeLayout又称为相对布局,也是一种常用的布局形式.和LinearLayout的排列规则不同,RelativeLayout显得更加随意一下,它通常通过相对定位 的方式让控件出现在布局的 ...

  2. 异常-Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hdfs, access=WRITE, inode="/hbase":root:supergroup:drwxr-xr-x

    1 详细异常 Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlExce ...

  3. 初始化springbean

    public class SMSMessageHandler implements InitializingBean { @Overridepublic void afterPropertiesSet ...

  4. nginx + php-fpm 搭建owncloud

    本文首发:https://www.cnblogs.com/somata/p/NgnixAndPhp-fpmBuildOwncloud.html 今天新研究的nginx,用owncloud来测试一下学的 ...

  5. 18.父组件给子组件传值&方法

    1.父组件给子组件传值 2.父组件把方法传递给子组件

  6. Sql Server 2017 安装问题记录

    记录了我在虚拟机中安装Sql server 2017遇到的一些问题. 安装环境: Sql server 2017 + Windows Server 2012 R2 提供两个网上的下载链接: https ...

  7. apache配置https加密传输

    环境:两台linux虚拟机和一台windows本机,一台充当要使用https传输的web服务器apache2.4.4,另一台CA服务器,window测试https配置. 1.CA服务器生成私有CA 1 ...

  8. 阿里云 centos7 安装mysql数据库

    环境:阿里云ECS服务器,系统为centos7.2 删除原来的数据库: centos7中默认安装了数据库MariaDB,如果直接安装MySQL的话,会直接覆盖掉这个数据库,当然也可以手动删除一下: [ ...

  9. 优化你的HTTPS(下),你需要这么做

    本篇文章是接着上篇文章来说,这篇介绍三种方法分别是多路复用 ,请求优先级,服务器推送. 多路复用 请求优先级 服务器推送 多路复用 在HTTP1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一 ...

  10. THINKPHP SQL注入处理方式

    //注入的产生一般都是对用户输入的参数未做任何处理直接对条件和语句进行拼装. //不安全的写法举例1 $_GET['id']=8;//希望得到的是正整数 $data=M('Member')->w ...