请输入您要查询的百科知识:

 

词条 gcc
释义
1 用于linux系统下编程的编译器

GCC是一个用于linux系统下编程的编译器。GCC又是海湾阿拉伯国家合作委员会的英文缩写。

概述

GCC(GNU Compiler Collection,GNU编译器套装),是一套由 GNU 开发的编程语言编译器。它是一套以 GPL 及 LGPL 许可证所发行的自由软件,也是 GNU计划的关键部分,亦是自由的类Unix及苹果电脑 Mac OS X 操作系统的标准编译器。

GCC 原名为 GNU C 语言编译器,因为它原本只能处理 C语言。GCC 很快地扩展,变得可处理 C++。之后也变得可处理 Fortran、Pascal、Objective-C、Java, 以及 Ada与其他语言。

顺义

GCC俱乐部

结构

GCC的外部接口长得像一个标准的Unix编译器。使用者在命令列下键入gcc之程序名,以及一些命令参数,以便决定每个输入档案使用的个别语言编译器,并为输出程序码使用适合此硬件平台的组合语言编译器,并且选择性地执行连结器以制造可执行的程序。

每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。

几乎全部的GCC都由C写成,除了Ada前端大部分以Ada写成。

前端接口

前端的功能在于产生一个可让后端处理之语法树。此语法解析器是手写之递回语法解析器。

直到最近,程序的语法树结构尚无法与欲产出的处理器架构脱钩。而语法树的规则有时在不同的语言前端也不一样,有些前端会提供它们特别的语法树规则。

在2005年,两种与语言脱钩的新型态语法树纳入GCC中。它们称为GENERIC与GIMPLE。语法解析变成产生与语言相关的暂时语法树,再将它们转成GENERIC。之后再使用"gimplifier"技术降低GENERIC的复杂结构,成为一较简单的静态唯一形式(Static Single Assignment form,SSA)基础的GIMPLE形式。此形式是一个与语言和处理器架构脱钩的全域最佳化通用语言,适用于大多数的现代编程语言。

中介接口

一般编译器作者会将语法树的最佳化放在前端,但其实此步骤并不看语言的种类而有不同,且不需要用到语法解析器。因此GCC作者们将此步骤归入通称为中介阶段的部分里。此类的最佳化包括消解死码、消解重复运算与全域数值重编码等。许多最佳化技巧也正在实作中。

后端接口

GCC后端的行为因不同的前处理器宏和特定架构的功能而不同,例如不同的字符尺寸、呼叫方式与大小尾序等。后端接口的前半部利用这些讯息决定其RTL的生成形式,因此虽然GCC的RTL理论上不受处理器影响,但在此阶段其抽象指令已被转换成目标架构的格式。

GCC的最佳化技巧依其释出版本而有很大不同,但都包含了标准的最佳化算法,例如循环最佳化、执行绪跳跃、共通程序子句消减、指令排程等等。而RTL的最佳化由于可用的情形较少,且缺乏较高阶的资讯,因此比较起近来增加的GIMPLE语法树形式[2],便显得比较不重要。

后端经由一重读取步骤后,利用描述目标处理器的指令集时所取得的资讯,将抽象暂存器替换成处理器的真实暂存器。此阶段非常复杂,因为它必须关照所有GCC可移植平台的处理器指令集的规格与技术细节。

后端的最后步骤相当公式化,仅仅将前一阶段得到的组合语言码藉由简单的副函式转换其暂存器与内存位置成相对应的机械码。

基本规则

gcc所遵循的部分约定规则:

.c为后缀的文件,C语言源代码文件;

.a为后缀的文件,是由目标文件构成的档案库文件;

.C,.cc或.cxx 为后缀的文件,是C++源代码文件;

.h为后缀的文件,是程序所包含的头文件;

.i 为后缀的文件,是已经预处理过的C源代码文件;

.ii为后缀的文件,是已经预处理过的C++源代码文件;

.m为后缀的文件,是Objective-C源代码文件;

.o为后缀的文件,是编译后的目标文件;

.s为后缀的文件,是汇编语言源代码文件;

.S为后缀的文件,是经过预编译的汇编语言源代码文件。

执行过程

虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。

命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。接着调用cc1进行编译,这个阶段根据输入文件生成以.o为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

基本用法

在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。

GCC最基本的用法是∶gcc [options] [filenames]

其中options就是编译器所需要的参数,filenames给出相关的文件名称。

-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。

-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。

-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶

A)#include <myinc.h>

B)#include “myinc.h”

其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。

GCC执行过程示例

示例代码 a.c:

#include <stdio.h>

int main()

{

printf("hello\");

}

预编译过程

这个过程处理宏定义和include,并做语法检查。

可以看到预编译后,代码从5行扩展到了910行。

gcc -E a.c -o a.i

cat a.c | wc -l

5

cat a.i | wc -l

910

编译过程

这个阶段,生成汇编代码。

gcc -S a.i -o a.s

cat a.s | wc -l

59

汇编过程

这个阶段,生成目标代码。

此过程生成ELF格式的目标代码。

gcc -c a.s -o a.o

file a.o

a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped

链接过程

链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。

gcc a.o -o a

程序运行:

./a

hello

GCC编译简单例子

编写如下代码:

#include <stdio.h>

int main()

{

printf("hello,world!\");

}

执行情况如下:

gcc -E hello.c -o hello.i

gcc -S hello.i -o hello.s

gcc -c hello.s -o hello.o

gcc hello.o -o hello

./hello

hello,world!

目前支持的语言

以2006年5月24日释出的4.1.1版为准,本编译器版本可处理下列语言:

Ada 〈GNAT〉

C 〈GCC〉

C++(G++)

Fortran 〈Fortran 77: G77, Fortran 90: GFORTRAN〉

Java 〈编译器:GCJ;解释器:GIJ〉

Objective-C 〈GOBJC〉

Objective-C++

先前版本纳入的CHILL前端由于缺乏维护而被废弃。

Fortran前端在4.0版之前是G77,此前端仅支援Fortran 77。在本版本中,G77被废弃而采用更新的GFortran,因为此前端支援Fortran 95。

下列前端依然存在:

Modula-2

Modula-3

Pascal

PL/I

D语言

Mercury

VHDL

支援的处理器架构

GCC目前支援下列处理器架构(以4.1版为准):

Alpha

ARM

Atmel AVR

Blackfin

H8/300

IA-32〈x86〉 与x86-64

IA-64例如:Itanium

MorphoSys 家族

Motorola 68000

Motorola 88000

MIPS

PA-RISC

PDP-11

PowerPC

System/370,System/390

SuperH

HC12

SPARC

VAX

Renesas R8C/M16C/M32C家族

较不知名的处理器架构也在官方释出版本中支援:

A29K

ARC

C4x

CRIS

D30V

DSP16xx

FR-30

FR-V

Intel i960

IP2000

M32R

68HC11

MCORE

MMIX

MN10200

MN10300

NS32K

ROMP

Stormy16

V850

Xtensa

由FSF个别维护的GCC处理器架构:

D10V

MicroBlaze

PDP-10

MSP430

Z8000

当GCC需要移植到一个新平台上,通常使用此平台固有的语言来撰写其初始阶段。

为GCC 程序除错

为 GCC 除错的首选工具当然是 GNU 除错器。其他特殊用途的除错工具是 Valgrind, 用以发现内存漏失 (Memory leak)。而 GNU 测量器 (gprof) 可以得知程序中某些函式花费多少时间,以及其呼叫频率;此功能需要使用者在编译时选定测量〈profiling〉选项。

GCC编译器的使用

首先检查是否在你的机器上安装了GCC,使用命令:

可用rpm -q gcc 检查。

如果没有安装,请依序检查并安装下面各RPM

libbinutils

binutils

make

glibc-devel

gcc-cpp

gcc

看下面的例子:test.c

#include

main()

{ char *str="I like Linux! I advices you jion in the Linux World";

printf("%s ",str);

exit(0);

}

使用gcc编译。输入gcc -c test.c得到目标文件test.o.-c命令表示对文件进行编译和汇编。但并不连接。如果再键入gcc -o ../bin/test test.o,那么将得到名为test的可执行文件。其实这两步可以一气呵成,gcc ../bin/test test.c.如果程序没有错误就生成了可执行文件。也许你会觉得基于命令行的编译器比不上如VC之类的集成开发环境,的确gcc的界面要改进,但是你一旦熟练了就会感到。gcc的效率如此之高。可以告诉大家的是Linux底下强大的C/C++集成开发环境Kdevelope和Vc一样强大,使用了Gcc编译器。

GNU C编译器 即gcc是一个功能强大的ANSI C兼容编译器,你会操作其他操作系统下的一种C编译器,能很快掌握GCC,我也是学了不久的GCC.

1、使用Gcc,Gcc是基于命令行的,使用时通常后跟一些选项和文件名。Gcc的基本用法如下: gcc [options] [filenames] 命令行选项制定操作将对命令行上的每个给出的文件执行。

2、GCC的常用选项

编译选项:gcc有超过100个的编译选项可用。具体的可以使用命令man gcc察看

优化选项:用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。有很多的选想可以告诉GCc在耗费更多编译时间和牺牲易调试性的基础上产生更小更快的可执行文件。这些选项中最典型的就是-O和-O2。-O选项告诉gcc对源代码进行基本优化。-O2选项告诉Gcc产生尽可能小的和尽可能快的代码。还有一些很特殊的选项可以通过man gcc察看。

调试和剖析选项:GCC支持数种调试剖析选项。在这些选项中最常用的是-g和-pg.-g选项告诉gcc产生能被GNU调试器(如gdb)使用的调试信息,以便调试用户的程序。-pg选项告诉gcc在用户的程序中加入额外的代码,执行时,产生gprof用的剖析信息以显示程序的耗时情况。

3、使用gdb

使用方法:在命令行中健入gdb并按回车就可以运行gdb了,启动gdb后,能在命令行上制定很多的选项,也可以下面的方式来运行gdb: gdb filename 用这种方式运行gdb时,能直接指定想要调试的程序。在命令行上健入gdb -h得到一个有关gdb的选项的说明简单列表。

编译代码以供调试,为了使gdb工作,必须使程序在编译时包含调试信息,调试信息包含程序里的每个变量的类型,在可执行文件里的地址映射以及源代码的行号。gdb利用这些信息使源代码和机器码相关联。

关于gcc的大体就写这么多吧,更多的信息可以查找帮助,记得学习Linux的一大武器man或者info命令,下次在介绍一下使用c/C++编写大型程序的makefile文件和make命令。

2 海湾阿拉伯国家合作委员会

GCC=Gulf Cooperation Council,海湾阿拉伯国家合作委员会的英文缩写。

海湾合作委员会于1981年5月25日在阿联酋阿布扎比成立。其成员国为沙特阿拉伯,科威特,阿拉伯联合酋长国,卡塔尔,阿曼苏丹王国,巴林王国等6国。总秘书处设在沙特阿拉伯首都利雅得。最高权力机构为最高理事会,由成员国元首组成,主席由各国元首轮流担任,任期一年。现任主席为阿曼苏丹卡布斯。六国政治、经济体制相似,王室联系紧密,在政治、经济、外交、国防等方面有共同的利益,是中东地区一个重要的政治经济组织。

3 全球创业周中国站校园伙伴

Global Entrepreneurship Week China Campus(简称GCC)是由全球创业周中国站组委会在2010年6月发起的以全国大学生创业类社团/协会/俱乐部为对象的校园伙伴,旨在联合全国有创业梦想的大学生共享全球创业周这一盛事,与全球近百个国家的青年人共享创业,共燃激情,共铸梦想,共创伟业。

2010创业周暨全球创业周中国站活动总揽

主题活动 9月-11月 创业课堂校园巡讲 全国百所高校


 9月-11月 天使投资俱乐部活动 上海


 11月24-25日 创业教育年会 上海


 11月19-21日 创业家年会 北京

年度特色活动 8月28-8月30日 创业训练营 上海


 8月20日-11月 创业视频大赛 全国百所高校


 9月4日-11月26月 “创想2015”首届中国大学生未来概念设计大赛 上海

合作助力活动 11月9日-13日 2010年中国国际工业博览会 上海


 11月16-21日 第十二届国际高新技术成果交易会 深圳


 8月-11月 青年创业日志大赛 全国


 8月20日-2011年2月26日 “绿动梦想”大学生商业计划挑战赛 全国


 3月-11月 Clean Tech Open 清洁能源创意大赛 全球40余国家共同参与


 7月-11月 2010 亚太企业案例分析大赛(APEE) 新西兰、阿联酋、中国、新加坡等


 2010年10月-11月 2010国际英语创业辩论大赛 上海


 10月下旬 2010上海大学大学生创业论坛 上海


 11月20日 2010中国(上海)互联网创新分享论坛 上海


 5月-11月 "通惠缘"杯创业擂台赛 上海


 10月-11月 2010国际英语创业辩论大赛 上海

2011创业周暨全球创业周中国站活动

2011创业周暨全球创业周中国站活动由上海市大学生科技创业基金会主办,在中国民主促进会、科技部、教育部、共青团中央、上海市政府等单位的大力支持下,以“汲天下智、铸创业力”主题,与全球近90个国家的年轻人一起,共同分享创意,点燃创业激情。各项活动精彩纷呈,期待您的参与!

2011创业周暨全球创业周中国站活动总览

主题活动 3月-11月  创业课堂校园巡讲  全国百所高校 创业课堂校园巡讲

3月-11月  天使投资人俱乐部系列活动  上海 天使投资人俱乐部系列活动  

11月  创业教育国际研讨会 上海 创业教育国际研讨会 

11月  创业家年会 北京 创业家年会  

年度特色活动 5月-12月  新新创业达人 全国 新新创业达人

5月/8月/11月 创业训练营 上海 创业训练营 

合作助力活动 8月-11月 全球创业周Clean Tech Open大赛 全球40余国家共同参与 全球创业周Clean Tech Open大赛

6月-11月 2011 亚太企业案例分析大赛(APEE) 新加坡,新西兰,中国,阿联酋等 2011 亚太企业案例分析大赛(APEE) 

8月-12月  Startup Weekend 上海 Startup Weekend  

11月1-5日 2011中国国际工业博览会  上海、深圳 参展工博会,高交会  

3月-11月 2011年第二届社会企业商业计划大赛  全国 第二届社会企业商业计划大赛  

2011年9月-11月 Startup Open 全国 Startup Open 

2011年6月 中国加速 全国 中国加速 

2011年5月-11月 2011“创宇低碳杯”全国大学生技术创业大赛(UTEC)  全国 2011“创宇低碳杯”全国大学生技术创业大赛(UTEC)  

11月16-21日 第十二届中国国际高新技术成果交易会  深圳  

4月-12月 “游·梦想”创意季  全球  

2011 年7 月17 日 诺丁汉社会企业论坛 宁波  

10月下旬 各地域伙伴自主活动 全国 各地域伙伴自主活动  

11月22日下午 各高校自主活动 全国 各高校自主活动  

11月22日上午 各类企业相关创业活动 上海 各类企业相关创业活动  

11月21日  British Council 等国际组织相关活动 上海、伦敦等 British Council 等国际组织相关活动 

GCC四川分站

心海TT工作室由原四川大学心海大学生慈善同盟与TT团队合并而成,TT意思为:TimeTeam,是一支讲效率,重协作的团队。TT团队成立于2006年8月,经历一年,于2007年8月18日成立心海TT工作室,主要负责公益与公司业务。

2011年3月,全球创业周中国站组委会授权心海TT工作室为全球创业周中国站校园伙伴(GCC)四川分站。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/9 17:21:48