前言:

GCC 原名为 GNU C 语言编译器(GNU C Compiler),因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。后来又
扩展能够支持更多编程语言,如Fortran、Pascal、Objective-C、Java、Ada、Go以及各类处理器架构上的汇编语言等,所以改

名GNU编译器套件(GNU Compiler Collection)。(百度百科,想了解自己查询)

一.GCC程序的编译过程大概分四个阶段

  • 预处理(Pre-Processing)
  • 编译(Compiling)
  • 汇编(Assembling)
  • 链接(Linking)

二.简单HelloWorld程序的编译过程

示例:HelloWorld.c

 #include <stdio.h>
int main()
{
  printf("Hello World!\n");
  return ;
}

Ctrl+Alt+T  --->打开控制台--->输入vim HelloWorld.c

1. 执行如下命令:$ gcc -o HelloWorld HelloWorld.c


运行如下 : $ ./HelloWorld
输出: HelloWorld!


2. 分步编译如下:
(1) $ gcc –E HelloWorld.c -o HelloWorld.i

可以输出HelloWorld.i文件中存放着HelloWorld.c经预处理之后的代码。打开HelloWorld.i文件,看一看,就明白了。后面那条指令,是直接在命令行窗口中输出预处理后的代码.

gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到HelloWorld.c中了。


//预处理结束
//这时候你看一下HelloWorld.i ,可以看到插进去了很多东西。


(2) $ gcc –S HelloWorld.i

gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。

查看下HelloWorld.s //生成汇编代码后结束

(3)生成汇编代码文件HelloWorld.s以后,需要gas汇编器负责将其编译为目标文件,如下:

$ gcc –c HelloWorld.c
或者:
$ gcc -c HelloWorld.c –o HelloWorld.o
或者:
$ gcc -c HelloWorld.i -o HelloWorld.o

//编译结束
//生成 HelloWorld.o文件

(4) $ gcc HelloWorld.o –o HelloWorld 生成连接,可执行文件(HellWorld重新生成的可执行文件)

gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。

附加的目标文件包括静态连接库和动态连接库。

对于上一小节中生成的HelloWorld.o,将其与C标准输入输出库进行连接,最终生成程序HelloWorld可执行文件

输入命令:gcc HelloWorld.o –o HelloWorld--->生成如下图:

3. 多个程序文件的编译

一般情况一个程序都是有若干个文件源文件组成,所以编译的时候需要形成多个编译单元,使用GCC编译器可以将多个源文件编译成所需要的程序

比如:源文件有main.c     a.c     b.c  最终生成一个可执行的文件main

比如:一个工程有main.c a.c b.c生成test的可执行文件。
编译命令如下:
$ gcc –c main.c a.c b.c –o main
或者:
$ gcc –o main main.c a.c b.c

GCC仍然会按照预处理、编译和链接的过程依次进行

大概过程相当于:

gcc -c main.c -o main.o

gcc -c a.c -o a.o

gcc -c b.c -o b.o

最后:

gcc main.o a.o b.o -o main

Linux系统GCC常用命令和GCC编译过程描述的更多相关文章

  1. Linux 系统巡检常用命令

    Linux系统巡检常用命令   # uname -a # 查看内核/操作系统# cat /etc/centos-release # 查看centos操作系统版本# cat /proc/cpuinfo ...

  2. linux系统的常用命令

    linux系统中常用的命令如下(以后经常补充): cd ..   返回上一级 cd use  进入use目录

  3. Linux系统之-常用命令及技巧

    一. 通用命令:1.date :print or set the system date and time2. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z ...

  4. 用xshell操作linux系统的常用命令

    (1)命令ls——列出文件 ls -la 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls a* 列出当前目录下以字母a开头的所有文件 ls -l *.doc 给出当前目录下以. ...

  5. linux系统学习(常用命令)

    今天调休,闲来无事,研究一下linux系统. Linux常用命令: 一:文件管理 ctrl+alt:在虚拟机与windows之间切换ctrl+g:进入linux输入模式 pwd:查看当前目录 ls:列 ...

  6. Linux系统巡检常用命令-乾颐堂

    Linux系统需要定期巡检,以检查服务器软硬件使用情况,相当于对人的体检,确保可以及时发现问题.解决问题,降低损失,常用的巡检命令如下: # uname -a # 查看内核/操作系统/CPU信息 # ...

  7. Linux系统一些常用命令(持续增加)

    这些命令什么的全是从网上找的,防止忘记,留下来备忘 1.linux服务器如何从另一台服务器拷东西:可以用scp命令scp user@remote.machine:/remote/path /local ...

  8. LINUX系统一一常用命令

    前言 LINUX UNIX Centos RedHat Ubuntu SHELL shell脚本 shell shell命令 类似windows系统的bat 批处理文件 里面都是脚本 CentOS6. ...

  9. Linux 系统监控常用命令

    简介 列举操作系统级监控常用的几个方法,建议收藏使用 CPU top 命令可用于监控系统整体负载,包括cpu.内存使用等,能够实时显示系统中各个进程的资源占用状况 输出样例 top - 19:37:4 ...

随机推荐

  1. mybatis:choose when otherwise标签

    choose标签是按顺序判断其内部when标签中的test条件是否成立,如果有一个成立,则 choose 结束. 当 choose 中所有 when 的条件都不满则时,则执行 otherwise 中的 ...

  2. 【转】机器学习教程 十四-利用tensorflow做手写数字识别

    模式识别领域应用机器学习的场景非常多,手写识别就是其中一种,最简单的数字识别是一个多类分类问题,我们借这个多类分类问题来介绍一下google最新开源的tensorflow框架,后面深度学习的内容都会基 ...

  3. php二维数组相同id的数量相加

    数组样式 $arr = array( array( , , , ), array( , , , ), array( , , , ), array( , , , ), ); 处理办法 $item=arr ...

  4. 关于firefox对font awesome本地环境无法加载问题

    问题描述 昨天尝试使用font awesome加载字体图标,直接在本地引入相关文件,测试发现图标在chrome和IE环境支持,但是在firefox上怎么都显示不出来. 解决方法 通过测试发现通过htt ...

  5. C程序汇编运行模式简析

    SJTUBEAR 原创作品转载请注明出处 /<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1. 汇编 ...

  6. 目标电脑未安装VC++6.0或者VS,运行APP丢失DLL问题解决办法

    一.背景 VS或者VC++6.0编译出来的程序需要在未安装VS/VC++6.0的电脑上跑,很大情况会出现MSVCRXXX.dll 或者其他DLL丢失的情形,本篇就DLL相关问题做个记录. 二.正文 1 ...

  7. 网络第三节——NSURLSession

    有的程序员老了,还没听过NSURLSession有的程序员还嫩,没用过NSURLConnection有的程序员很单纯,他只知道AFN. NSURLConnection在iOS9被宣布弃用,NSURLS ...

  8. Android之Linearlayouy线性布局

    写了个小例子xml代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...

  9. headroom.js –在不需要页头时将其隐藏

    官方网站 http://www.bootcss.com/p/headroom.js/

  10. xpath定位中starts-with、contains和text()的用法

    starts-with 顾名思义,匹配一个属性开始位置的关键字 contains 匹配一个属性值中包含的字符串 text() 匹配的是显示文本信息,此处也可以用来做定位用 eg //input[sta ...