第二个灵魂 发表于 2015-1-14 20:31:32

给大家带来CentOS检察以后体系下的gcc版本下令

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!1.gcc-v(Displaytheprogramsinvokedbythecompiler)#gcc-v
Readingspecsfrom/usr/i386-glibc-2.1-linux/lib/gcc-lib/i386-glibc21-linux/egcs-2.91.66/specs
gccversionegcs-2.91.6619990314/Linux(egcs-1.1.2release)

2.rpm-qa|grepgcc
rpm-qigcc

#rpm-qa|grepgcc
gcc-3.2.2-5
gcc-c++-3.2.2-5
libgcc-3.2.2-5
compat-gcc-7.3-2.96.118
gcc-g77-3.2.2-5
gcc-java-3.2.2-5
gcc-gnat-3.2.2-5
compat-gcc-c++-7.3-2.96.118

3.gcc-dumpversion(Displaytheversionofthecompiler)
#gcc-dumpversion
egcs-2.91.66
*******************************************************************************************
Linux体系下的Gcc(GNUCCompiler)是GNU推出的功效壮大、功能优胜的多平台编译器,是GNU的代表作品之一。gcc是能够在多种硬体平台上编译出可实行步伐的超等编译器,其实行效力与一样平常的编译器比拟均匀效力要高20%~30%。
Gcc编译器能将C、C++言语源步伐、汇程式化序和方针步伐编译、毗连成可实行文件,假如没有给出可实行文件的名字,gcc将天生一个名为a.out的文件。在Linux体系中,可实行文件没有一致的后缀,体系从文件的属性来辨别可实行文件和不成实行文件。而gcc则经由过程后缀来区分输出文件的种别,上面我们来先容gcc所遵守的局部商定划定规矩。


.c为后缀的文件,C言语源代码文件;
.a为后缀的文件,是由方针文件组成的档案库文件;
.C,.cc或.cxx为后缀的文件,是C++源代码文件;
.h为后缀的文件,是步伐所包括的头文件;
.i为后缀的文件,是已预处置过的C源代码文件;
.ii为后缀的文件,是已预处置过的C++源代码文件;
.m为后缀的文件,是Objective-C源代码文件;
.o为后缀的文件,是编译后的方针文件;
.s为后缀的文件,是汇编言语源代码文件;
.S为后缀的文件,是经由预编译的汇编言语源代码文件。

Gcc的实行历程
固然我们称Gcc是C言语的编译器,但利用gcc由C言语源代码文件天生可实行文件的历程不单单是编译的历程,而是要履历四个互相联系关系的步调∶预处置(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和毗连(Linking)。
下令gcc起首挪用cpp举行预处置,在预处置过程当中,对源代码文件中的文件包括(include)、预编译语句(如宏界说define等)举行剖析。接着挪用cc1举行编译,这个阶段依据输出文件天生以.o为后缀的方针文件。汇编历程是针对汇编言语的步调,挪用as举行事情,一样平常来说,.S为后缀的汇编言语源代码文件和汇编、.s为后缀的汇编言语文件经由预编译和汇编以后都天生以.o为后缀的方针文件。当一切的方针文件都天生以后,gcc就挪用ld来完成最初的关头性事情,这个阶段就是毗连。在毗连阶段,一切的方针文件被布置在可实行步伐中的得当的地位,同时,该步伐所挪用到的库函数也从各自地点的档案库中连到符合的中央。

Gcc的基础用法和选项
在利用Gcc编译器的时分,我们必需给出一系列需要的挪用参数和文件称号。Gcc编译器的挪用参数约莫有100多个,个中多半参数我们大概基本就用不到,这里只先容个中最基础、最经常使用的参数。
Gcc最基础的用法是∶gcc
个中options就是编译器所必要的参数,filenames给出相干的文件称号。
-c,只编译,不毗连成为可实行文件,编译器只是由输出的.c等源代码文件天生.o为后缀的方针文件,一般用于编译不包括主步伐的子步伐文件。
-ooutput_filename,断定输入文件的称号为output_filename,同时这个称号不克不及和源文件同名。假如不给出这个选项,gcc就给出预设的可实行文件a.out。
-g,发生标记调试工具(GNU的gdb)所需要的标记资讯,要想对源代码举行调试,我们就必需到场这个选项。
-O,对步伐举行优化编译、毗连,接纳这个选项,全部源代码会在编译、毗连过程当中举行优化处置,如许发生的可实行文件的实行效力能够进步,可是,编译、毗连的速率就响应地要慢一些。
-O2,比-O更好的优化编译、毗连,固然全部编译、毗连历程会更慢。
-Idirname,将dirname所指出的目次到场到步伐头文件目次列表中,是在预编译过程当中利用的参数。C步伐中的头文件包括两种情形∶
A)#include
B)#include“myinc.h”
个中,A类利用尖括号(),B类利用双引号(“”)。关于A类,预处置步伐cpp在体系预设包括文件目次(如/usr/include)中征采响应的文件,而关于B类,cpp在以后目次中征采头文件,这个选项的感化是告知cpp,假如在以后目次中没有找到必要的文件,就到指定的dirname目次中往寻觅。在步伐计划中,假如我们必要的这类包括文件分别散布在分歧的目次中,就必要逐一利用-I选项给出搜刮路径。
-Ldirname,将dirname所指出的目次到场到步伐函数档案库文件的目次列表中,是在毗连过程当中利用的参数。在预设形态下,毗连步伐ld在体系的预设路径中(如/usr/lib)寻觅所必要的档案库文件,这个选项告知毗连步伐,起首到-L指定的目次中往寻觅,然后到体系预设路径中寻觅,假如函数库寄存在多个目次下,就必要顺次利用这个选项,给出响应的寄存目次。
-lname,在毗连时,装载名字为“libname.a”的函数库,该函数库位于体系预设的目次大概由-L选项断定的目次下。比方,-lm暗示毗连名为“libm.a”的数学函数库。
下面我们扼要先容了gcc编译器最经常使用的功效和次要参数选项,更加细致的材料能够参看Linux体系的联机匡助。
假定我们有一个步伐名为test.c的C言语源代码文件,要天生一个可实行文件,最复杂的举措就是∶
gcctest.c
这时候,预编译、编译毗连一次完成,天生一个体系预设的名为a.out的可实行文件,关于稍为庞大的情形,好比有多个源代码文件、必要毗连档案库大概有其他对照出格的请求,就要给定得当的挪用选项参数。再看一个复杂的例子。
全部源代码步伐由两个文件testmain.c和testsub.c构成,步伐中利用了体系供应的数学库,同时但愿给出的可实行文件为test,这时候的编译下令能够是∶
gcctestmain.ctestsub.c□lm□otest
个中,-lm暗示毗连体系的数学库libm.a。

Gcc的毛病范例及对策
Gcc编译器假如发明源步伐中有毛病,就没法持续举行,也没法天生终极的可实行文件。为了便于修正,gcc给堕落误资讯,我们必需对这些毛病资讯逐一举行剖析、处置,并修正响应的言语,才干包管源代码的准确编译毗连。gcc给出的毛病资讯一样平常能够分为四年夜类,上面我们分离会商其发生的缘故原由和对策。

第一类∶C语法毛病
毛病资讯∶文件source.c中第n行有语法毛病(syntexerrror)。这类范例的毛病,一样平常都是C言语的语法毛病,应当细心反省源代码文件中第n行及该行之前的步伐,偶然也必要对该文件所包括的头文件举行检查。有些情形下,一个很复杂的语法毛病,gcc会给出一年夜堆毛病,我们最次要的是要坚持苏醒的思想,不要被其吓倒,需要的时分再参考一下C言语的基础教材。
第二类∶头文件毛病
毛病资讯∶找不到头文件head.h(Cannotfindincludefilehead.h)。这类毛病是源代码文件中的包括头文件有成绩,大概的缘故原由有头文件名毛病、指定的头文件地点目次名毛病等,也多是毛病地利用了双引号和尖括号。

第三类∶档案库毛病
毛病资讯∶毗连步伐找不到所需的函数库,比方∶
ld:-lm:Nosuchfileordirectory
这类毛病是与方针文件相毗连的函数库有毛病,大概的缘故原由是函数库名毛病、指定的函数库地点目次称号毛病等,反省的***是利用find下令在大概的目次中寻觅响应的函数库名,断定档案库及目次的称号并修正步伐中及编译选项中的称号。
第四类∶不决义标记
毛病资讯∶有不决义的标记(Undefinedsymbol)。这类毛病是在毗连过程当中呈现的,大概有两种缘故原由∶一是利用者本人界说的函数大概全局变量地点源代码文件,没有被编译、毗连,大概爽性还没有界说,这必要利用者依据实践情形修正源步伐,给出全局变量大概函数的界说体;二是不决义的标记是一个尺度的库函数,在源步伐中利用了该库函数,而毗连过程中还没有给定响应的函数库的称号,大概是该档案库的目次称号有成绩,这时候必要利用档案库保护下令ar反省我们必要的库函数究竟位于哪个函数库中,断定以后,修正gcc毗连选项中的-l和-L项。
扫除编译、毗连过程当中的毛病,应当说这只是步伐计划中最复杂、最基础的一个步调,能够说只是开了个头。这个过程当中的毛病,只是我们在利用C言语形貌一个算法中所发生的毛病,是对照简单扫除的。我们写一个步伐,到编译、毗连经由过程为止,应当说方才入手下手,步伐在运转过程当中所呈现的成绩,是算法计划有成绩,说得更玄点是对成绩的熟悉和了解不敷,还必要加倍深切地测试、调试和修正。一个步伐,稍为庞大的步伐,常常要经由屡次的编译、毗连和测试、修正。上面我们进修的步伐保护、调试工具和版本保护就是在步伐调试、测试过程当中利用的,用来办理调测阶段所呈现的成绩如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!

莫相离 发表于 2015-1-16 19:28:38

给大家带来CentOS检察以后体系下的gcc版本下令

生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。

若天明 发表于 2015-1-22 06:53:31

Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。

分手快乐 发表于 2015-2-6 17:30:31

目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和DebianLinux是网络管理员的理想选择。

小女巫 发表于 2015-2-17 23:58:39

工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多。

冷月葬花魂 发表于 2015-3-6 00:40:02

在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。

变相怪杰 发表于 2015-3-12 19:22:53

随着Linux应用的扩展,出现了不少Linux社区。有一些非常优秀的社区往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。

深爱那片海 发表于 2015-3-20 02:25:35

Linux最大的特点就是其开源性,这一点是十分难得的,这也是它能够存在到现在的原因之一。
页: [1]
查看完整版本: 给大家带来CentOS检察以后体系下的gcc版本下令