linux应用程序设计--GCC程序编译
GCC程序编译
linux系统下的GCC(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作之一。GCC可以在多种硬件平台上编译出可执行程序,其执行效率与一般的编译器相比,平均效率要高20%~30%。
GCC编译程序的四个阶段
- 预处理(Pre-Processing):编译器将C程序的头文件编译进来,还有完成宏的替换。
- 编译(Compiling):这个阶段编译器主要做词法分析、语法分析、语义分析等,在检查无误后,将程序编译成汇编语言。
- 汇编(Assembling):将汇编程序翻译成机器语言,也就是二进制程序。
- 链接(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程序编译的更多相关文章
- 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程
汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...
- linux下使用gcc/g++编译代码时gets函数有错误
今天在linux中使用个g++编译一个名为myfirst.cpp的代码的时候,出现如下错误 myfirst.cpp: In function ‘int main()’:myfirst.cpp:11:2 ...
- 1-1 编程基础 GCC程序编译
GCC简介 Linux系统下的gcc是GNU推出的强大.性能优越的多平台编译器,是GNU的代表作之一.gcc可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平局效率要高20 ...
- [国嵌笔记][012][GCC程序编译]
GCC特点 GCC(GUN C Compiler)是GUN推出的功能强大.性能优越的多平台编译器.其执行效率与一般编译器相比平均效率要高20%~30%. GCC基本用法 gcc [options] f ...
- 如何在 Linux 上安装应用程序
如何在 Linux 上安装应用程序 编译自:https://opensource.com/article/18/1/how-install-apps-linux作者: Seth Kenlon原创:LC ...
- linux下使用gcc编译运行C程序
gcc(GNU Compiler Collection)是Linux下最常用的C语言编译器,是GNU项目中符合ANSI C标准的编译系统,能够编译用C.C++和Object C等语言编写的程序. 在 ...
- linux下使用gcc编译运行C/C++程序
编译C 首先,程序编译过程有: 1.预处理(展开宏,头文件,检查代码是否有误) 2.编译(将.c转为汇编代码.s) 3.汇编(将汇编代码.s转为机器代码.o) 4.链接(将所有机器代码.o和库文件链 ...
- Linux 程序编译过程的来龙去脉
大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...
- linux程序编译过程
大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...
随机推荐
- layui弹出框打开第二次select内容无法显示问题
今天, 在使用layui弹出框的时候, 第一次进入select内容加载是正常的, 将弹出框关闭再次进入后select下拉框内容为空, 经排查是因为每次弹出窗口z-index都会改变, 弹出框的z-in ...
- Win8 Metro(C#)数字图像处理--3.5图像形心计算
原文:Win8 Metro(C#)数字图像处理--3.5图像形心计算 /// <summary> /// Get the center of the object in an image. ...
- 零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下)
原文:零元学Expression Blend 4 - Chapter 38 看如何使用Clip修出想要的完美曲线(下) 你可以把Clip想成是一个遮罩,运用遮罩达到我们想要的效果 所以在这里我们把文字 ...
- C# mysql set和enum属性字段的读取和添加
1.使用Navicat for Mysql设置set和enum属性字段: a.enum类型 b.set类型 enum类型在创建表时需要设置初始值,在如图所示的位置设置. 2.C#读取和添加数据 a.e ...
- Android零基础入门第77节:Activity任务栈和启动模式
通过前面的学习,Activity的基本使用都已掌握,接下来一起来学习更高级的一些内容. Android采用任务栈(Task)的方式来管理Activity的实例.当启动一个应用时,Android就会为之 ...
- 使用 GNU autotools 改造一个软件项目
使用 GNU autotools 改造一个软件项目 及永刚 jungle@soforge.com 2006 年 3 月 24 日 版本:0.3 本文不是一篇规范的教程,而是用一个软件项目作为例子,演 ...
- 所有W版本的函数都在wchar.h文件(_wfopen),和stdlib.h文件(wcstombs),和stdio.h文件(vwprintf)
C:\Qt\Qt5.6.2\Tools\mingw492_32\i686-w64-mingw32\include\wchar.h C:\Qt\Qt5.6.2\Tools\mingw492_32\i68 ...
- mouseover和mouseout事件引发的BUG-解决方法
mouseover和mouseout引发的BUG原由 当给一个元素添加mouseover或mouseout事件,这个元素还有子元素. 由于子元素的事件冒泡,鼠标移入或移出子元素都会触发事件. 解决的方 ...
- Java对象结构及HotSpot对象模型
一.对象结构 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).下图是普通对象实例与数组对象 ...
- 编解码器之战:AV1、HEVC、VP9和VVC
视频Codec专家Jan Ozer在Streaming Media West上主持了一场开放论坛,邀请百余名观众参与热门Codec的各项优势与短板.本文整理了讨论的主要成果,基本代表了AV1.HEVC ...