GCC程序编译

linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一般的编译器相比,平均效率要高20%~30%。

GCC编译程序的四个阶段

  1. 预处理(Pre-Processing):编译器将C程序的头文件编译进来,还有完成宏的替换。
  2. 编译(Compiling):这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无误后,将程序编译成汇编语言。
  3. 汇编(Assembling):将汇编程序翻译成机器语言,也就是二进制程序。
  4. 链接(Linking):链接头文件中的函数所对应的函数库。例如:printf函数在stdio.h头文件中只是完成声明,要实现printf函数的功能,还需要链接到实际实现代码中去。

GCC通过后缀来区分输入文件的类别

.c

C语言源代码文件

.a

是由目标文件构成的库文件

.C,.cc或.cxx

C++源代码文件

.h

头文件

.i

已预处理过的C源代码文件

.ii

已预处理过的C++源代码文件

.o

编译后的目标文件

.s

汇编语言源代码文件

.S

经过预编译的汇编语言源代码文件

GCC用法

gcc [options] [filenames]

options : 编译器所需要的编译选项

filenames : 要编译的文件名

编译选项

-o output_filename : 确定可执行文件的名称,如果不添加该选项,则给出默认执行文件xxx.out

-c : 只编译,不链接成为可执行文件,生成.o目标文件

  

-g : 产生调试工具(GNU的GDB)所必要的调试信息

-O : 对程序进行优化编译、链接,产生的可执行文件的执行效率可以提高,但是编译、链接速度会降低

-O2 : 比-O更好的优化编译、链接

-I dirname : 将dirname所指出的目录加入到程序头文件目录列表中

C程序中的头文件包含两种情况:

#include <A.h>

#include "B.h"

对于<>,预处理程序cpp在系统预设的头文件目录中搜寻相应的文件

对于"",cpp在当前目录中搜寻头文件,如果添加-I选项,并且在当前目录中没有找到需要的文件,就到指定的dirname目录中去寻找。

 -L dirname : 将dirname所指定的目录加入到库文件的目录列表中。在默认情况下,连接程序ld在系统的预设路径中(/user/lib)寻找所需要的库文件,这个选项告诉链接程序,首先到-L指定的目录中去寻找,然后再到系统预设路径中寻找。

 -lname : 在连接时,装载名字为libname.a的函数库,该函数库的目录可以是系统预设或者由-L选项指定。

 -static : 静态链接库文件。当使用静态库时,链接器找出程序所需的函数,然后将它们拷贝到可执行文件中,此后将不需要静态程序库,但是静态链接占用空间大,所以linux下进行链接的缺省操作是链接动态库。

 -Wall : 生成所有警告信息

 -w : 不生成任何警告信息

 -DMACRO : 定义MACRO宏,等效于在程序中使用#define MACRO

linux应用程序设计--GCC程序编译的更多相关文章

  1. 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程

    汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...

  2. linux下使用gcc/g++编译代码时gets函数有错误

    今天在linux中使用个g++编译一个名为myfirst.cpp的代码的时候,出现如下错误 myfirst.cpp: In function ‘int main()’:myfirst.cpp:11:2 ...

  3. 1-1 编程基础 GCC程序编译

    GCC简介      Linux系统下的gcc是GNU推出的强大.性能优越的多平台编译器,是GNU的代表作之一.gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平局效率要高20 ...

  4. [国嵌笔记][012][GCC程序编译]

    GCC特点 GCC(GUN C Compiler)是GUN推出的功能强大.性能优越的多平台编译器.其执行效率与一般编译器相比平均效率要高20%~30%. GCC基本用法 gcc [options] f ...

  5. 如何在 Linux 上安装应用程序

    如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...

  6. linux下使用gcc编译运行C程序

    gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序.  在 ...

  7. linux下使用gcc编译运行C/C++程序

    编译C  首先,程序编译过程有: 1.预处理(展开宏,头文件,检查代码是否有误) 2.编译(将.c转为汇编代码.s) 3.汇编(将汇编代码.s转为机器代码.o) 4.链接(将所有机器代码.o和库文件链 ...

  8. Linux 程序编译过程的来龙去脉

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  9. linux程序编译过程

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

随机推荐

  1. Android 调试桥(adb)是多种用途的工具

    Android 调试桥 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态. 可以通过下列几种方法加入adb: 在设备上运行shell命令 通过端口转发来管理 ...

  2. Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化

    原文:Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化  [函数名称] Wallis图象锐化        WallisSharpen(WriteableBitmap sr ...

  3. wpf自定义带刻度的柱状图控件

    效果图: 主要代码xaml: <UserControl x:Class="INSControls._01Conning.Steer.ConningSpeedBar" xmln ...

  4. 安卓ImageButton圆角按钮设置

    首先图片要做成圆角的,使用美图秀秀,这个不多说. 之后使用设置了圆角的按钮,效果有缺陷,按钮会有灰色的边角. 类似这样: 去掉的方法是将layout的  android:src="@draw ...

  5. Delphi 项目失败的总结

    随着项目的失败,这些天一直在总结失败的原因,到底是为什么? 一.技术层面        1.少用指针类型,多用类.            虽然指针类型能有效的节约内存和加快运行速度,但指针远没有类来得 ...

  6. 配置QSslConfiguration让客户端程序跳过本地SSL验证

    大家下午好哦.今天我们在重新制作我们萌梦聊天室的时候,出现了这样的问题.那就是我们的客户端能够对qtdream.com服务器进行登录,但是不能对localhost服务器(也就是本机啦)进行登录.这究竟 ...

  7. SpringCloud系列——TX-LCN分布式事务管理

    前言 SpringCloud分布式架构给我们带来开发上的便利,同时增加了我们对事务管理的难度,微服务的遍地开花,本地事务已经无法满足分布式的要求,由此分布式事务问题诞生. 分布式事务被称为世界性的难题 ...

  8. java基础(1)-几种获取类的扩展方式

    摘要 在日常开发过程中经常需要获取类的扩展集.即获取类的子类集(抽象类),或者接口实现类.比如说状态模式中,状态构建类,策略模式中的,策略构造方式.本文介绍几种获取方式. 实现 以策略模式为例 定义了 ...

  9. 《Oracle PLSQL从入门到精通》pdf电子版

    链接:https://pan.baidu.com/s/1fhfMtmwM_hOAGgYOfNYlkw提取码:r53a 学习pl/sql的同学,可以看看这本书,讲解的很详细,从入门到精通,大家有什么不懂 ...

  10. devexpress GridView按条件给行号上色

    private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDra ...