010GCC程序编译
1、GCC的特点:
Gcc(GUN C Compiler)是GUN推出的功能强大、性能优越的多平台编译器,是GUN的代表作制衣。GCC可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%~30%。效率体现在编译出的文件小,花费时间短。
2、GCC基本使用方法:gcc [options] filenames
options:编译器所需要的编译选项
filenames:要编译的文件名
3、Gcc编译流程:
GCC编译器能将C/C++语言源程序、汇编程序形成可执行文件。真格形成过程可以被细分为四个阶段:
-E .c经过预处理形成.i (预处理:将宏替换到程序代码中)
-S .i经过编译形成.s
-c .s经过汇编形成.o
-o .o经过链接形成可执行文件
4、Gcc通过后缀来区别输入文件的类别:
.c为后缀的文件:C语言源代码文件
.a为后缀的文件:是由目标文件构成的库文件
.C,.cc或.cxx为后缀的文件:是C++源代码文件
.h为后缀的文件:头文件
.o为后缀的文件:是编译后的目标文件
.s为后缀的文件:是汇编预压源代码文件
5、Gcc编译选项:
-o output_filename:确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件a.out;
-O,对程序进行优化编译、链接,采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译,链接的速度就相应地慢一些;
-O2,比-O更好的优化编译、链接,但是,整个编译、链接过程会更慢;
优化:比如在程序中定义了一个名字为i的变量,但是整个程序运行过程中并没有使用这个变量,造成空间浪费,程序在编译时就能够发现这个问题,将没有用的东西优化掉。加上优化选项,就会将没有用的东西去掉,就不会造成浪费了。
统计程序的运行时间,可以用time命令,比如看hello的运行时间,执行的命令为:time ./hello
优化后的:
从两个图片的结果可以看出,优化并不影响程序的结果,但是效率更高!
-c:不链接,编译器只是由输入的.c等源代码文件编译生成.o为后缀的中间文件;
-g:产生调试工具(GNU的gdb)所需要的符号信息,要想对编译出的程序进行调试,就必加入这个选项;
-I dirname:将dirname所指出的目录作为编译器寻找头文件的标准路径;
C程序中的头文件包含两种情况:
#include <A.h>
#include "B.h"
对于<>,gcc在系统预设的头文件目录(如/usr/include)中搜寻相应的文件;对于"",gcc在当前目录中搜寻头文件。-I选项的作用是告诉gcc,如果当前目录中没有找到需要的头文件,就到指定的dirname目录中去寻找。也可以直接在双引号中指明路径:#include "/usr/A.h"
范例:gcc foo.c -I /home/include -o foo
每一个编译器都有一个标准的寻找头文件的路径;
编译错误与编译警告都是我们的程序设计中经常遇到的问题。编译错误一般是代码中出现语法错误,程序无法编译执行,必须修改;编译警告是编译器发现程序中不合理的地方(比如类型不匹配),建议最好修改,但不修改也可以编译执行。
-Wall:生成所有警告信息
-w:不生成任何警告信息
-DMACRO:定义MACRO宏,等效于在程序中使用#define MACRO
使用方法:gcc -DPRINT macro.c -o macro
010GCC程序编译的更多相关文章
- 代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值?
代码中,使用__DATE__宏,获取程序编译时间,如何保证每次编译代码(非重新生成方式),都能更新__DATE__的值? 解决:通过vs的预先生成命令中,添加批处理命令,删除对应的obj文件方式,强制 ...
- 简述 C、C++程序编译的内存分配情况【转】
面试题 9:简述 C.C++程序编译的内存分配情况 C.C++中内存分配方式可以分为三种: (1)从静态存储区域分配: 内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在.速度快. ...
- C程序编译过程浅析
前几天看了<程序员的自我修养——链接.装载与库>中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧. 我现在一般都是用gcc,所以自然以GCC编译hellworld ...
- Java程序编译和运行的过程
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程. 如下图,Java程序从源文件创建到程序运行要经过两大步骤:1.源文件由编译器编译成字节码(ByteCode) 2 ...
- Java程序编译和运行的过程【转】
转自:http://www.360doc.com/content/14/0218/23/9440338_353675002.shtml Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来 ...
- .NET概念:.NET程序编译和运行
.NET概念:.NET程序编译和运行 分类: c#程序设计 2012-02-29 15:46 3001人阅读 评论(2) 收藏 举报 .net编译器语言microsoftassemblyvb.net ...
- 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程
汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...
- .NET程序编译和运行
一次面试的时候遇到的一道题目,简要说明.NET的编译过程,在网上看了很多资料,简单总结如下: 1.一般的编译过程 通常高级语言的程序编译过程是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最 ...
- (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用
C++程序编译为C#可调用的dll的过程: 1.新建一个Win32 Console Application 项目,项目名为:DLLDemo,下一步选择Application type为DLL; 2.在 ...
随机推荐
- listview当选中某一个item时设置背景色其他的不变
listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和 ...
- 使用thinkphp连接sqlserver数据库时提示“系统不支持:sqlsrv”
习惯了使用php跟mysql组合,现在接到项目需要调用客户线下的系统软件的数据,具了解,这个软件的数据库是用sqlserver数据库也就是常说的mssql数据库了. 那么我现在需要用PHP连接sqls ...
- View的缩放操作--CGAffineTransformMakeScale:
__weak UIImageView *weekImage = imageView; imageView.transform = CGAffineTransformMakeScale(0.1, 0.1 ...
- Bug 是改不完滴
- [ActionScript 3.0] AS3.0 对象在一定范围随机显示不重叠
import flash.geom.Rectangle; import flash.display.MovieClip; import flash.display.Sprite; var arr:Ar ...
- 按列 sort 排序 Linux 如何查看当前占用CPU或内存最多的K个进程
用法:sort [选项]... [文件]...Write sorted concatenation of all FILE(s) to standard output. 长选项必须用的参数在使用短选项 ...
- DELPHI下的SOCK编程(转)
DELPHI下的SOCK编程 本文是写给公司新来的程序员的,算是一点培训的教材.本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识. 题外话:我认为 ...
- (medium)LeetCode 207.Course Schedule
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- 《Code Complete》ch.21 协同构建
WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...
- Codeforces Round #219 (Div. 2) B. Making Sequences is Fun
B. Making Sequences is Fun time limit per test 2 seconds memory limit per test 256 megabytes input s ...