<code id='0pgua'><strong id='0pgua'></strong></code>
    <dl id='0pgua'></dl>

  • <ins id='0pgua'></ins>

      1. <tr id='0pgua'><strong id='0pgua'></strong><small id='0pgua'></small><button id='0pgua'></button><li id='0pgua'><noscript id='0pgua'><big id='0pgua'></big><dt id='0pgua'></dt></noscript></li></tr><ol id='0pgua'><table id='0pgua'><blockquote id='0pgua'><tbody id='0pgua'></tbody></blockquote></table></ol><u id='0pgua'></u><kbd id='0pgua'><kbd id='0pgua'></kbd></kbd>
      2. <i id='0pgua'></i>

        <span id='0pgua'></span>

          <fieldset id='0pgua'></fieldset><i id='0pgua'><div id='0pgua'><ins id='0pgua'></ins></div></i>

            <acronym id='0pgua'><em id='0pgua'></em><td id='0pgua'><div id='0pgua'></div></td></acronym><address id='0pgua'><big id='0pgua'><big id='0pgua'></big><legend id='0pgua'></legend></big></address>

            CentOS如何查看当前系统下的gcc版本命令?

            • 时间:
            • 浏览:10
            • 来源:124软件资讯网

                CentOS怎样检察当前系统下的gcc版本下令?

              1. gcc -v(Display the programs invoked by the compiler)

                [root@localhost /]# gcc -v

                Reading specs from /usr/i386-glibc-2.1-linux/lib/gcc-lib/i386-glibc21-linux/egcs-2.91.66/specs

                gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)

                2. rpm -qa|grep gcc

                rpm -qi gcc

                [root@localhost /]# rpm -qa|grep gcc

                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 (Display the version of the compiler)

                [root@localhost /]# gcc -dumpversion

                egcs-2.91.66

                *******************************************************************************************

                Linux系统下的Gcc(GNU C Compiler)是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]

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

                -c ,只编译  ,不毗连成为可执行文件  ,编译器只是由输入的.c等源代码文件天生.o为后缀的目的文件 ,通常用于编译不包罗主法式的子法式文件  。

                -o output_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语言源代码文件  ,要天生一个可执行文件 ,最简朴的措施就是∶

                gcc test.c

                这时  ,预编译、编译毗连一次完成 ,天生一个系统预设的名为a.out的可执行文件 ,对于稍为庞大的情形  ,好比有多个源代码文件、需要毗连档案库或者有其他比力特殊的要求 ,就要给定适当的挪用选项参数  。再看一个简朴的例子  。

                整个源代码法式由两个文件testmain.c 和testsub.c组成 ,法式中使用了系统提供的数学库 ,同时希望给出的可执行文件为test  ,这时的编译下令可以是∶

                gcc testmain.c testsub.c □lm □o test

                其中 ,-lm表现毗连系统的数学库libm.a  。

                Gcc的错误类型及对策

                Gcc编译器若是发现源法式中有错误  ,就无法继续举行  ,也无法天生最终的可执行文件  。为了便于修改 ,gcc给堕落误资讯 ,我们必须对这些错误资讯逐个举行 剖析、处置惩罚 ,并修改响应的语言 ,才气保证源代码的准确编译毗连  。gcc给出的错误资讯一样平常可以分为四大类  ,下面我们划分讨论其发生的缘故原由和对策  。

                第一类∶C语法错误

                错误资讯∶文件source.c中第n行有语法错误(syntex errror)  。这种类型的错误 ,一样平常都是C语言的语法错误  ,应该仔细检查源代码文件中第n行及该行之前的法式 ,有时也需要对该文件所包罗的头文件举行检 查  。有些情形下  ,一个很简朴的语法错误  ,gcc会给出一大堆错误 ,我们最主要的是要保持苏醒的头脑  ,不要被其吓倒  ,须要的时间再参考一下C语言的基本教 材  。

                第二类∶头文件错误

                错误资讯∶找不到头文件head.h(Can not find include file head.h)  。这类错误是源代码文件中的包罗头文件有问题  ,可能的缘故原由有头文件名错误、指定的头文件所在目录名错误等  ,也可能是错误地使用了双引号和尖括号  。

                第三类∶档案库错误

                错误资讯∶毗连法式找不到所需的函数库  ,例如∶

                ld: -lm: No such file or directory

                这类错误是与目的文件相毗连的函数库有错误  ,可能的缘故原由是函数库名错误、指定的函数库所在目录名称错误等 ,检查的要领是使用find下令在可能的目录中寻找响应的函数库名  ,确定档案库及目录的名称并修改法式中及编译选项中的名称  。

                第四类∶未界说符号

                错误资讯∶有未界说的符号(Undefined symbol)  。这类错误是在毗连历程中泛起的 ,可能有两种缘故原由∶一是使用者自己界说的函数或者全局变量所在源代码文件  ,没有被编译、毗连  ,或者爽性还没 有界说 ,这需要使用者凭据现实情形修改源法式  ,给出全局变量或者函数的界说体;二是未界说的符号是一个尺度的库函数  ,在源法式中使用了该库函数  ,而毗连过 程中还没有给定响应的函数库的名称  ,或者是该档案库的目录名称有问题  ,这时需要使用档案库维护下令ar检查我们需要的库函数到底位于哪一个函数库中  ,确定 之后  ,修改gcc毗连选项中的-l和-L项  。

                清除编译、毗连历程中的错误  ,应该说这只是法式设计中最简朴、最基本的一个步骤  ,可以说只是开了个头 。这个历程中的错误  ,只是我们在使用C语言形貌一个算 法中所发生的错误 ,是比力容易清除的  。我们写一个法式 ,到编译、毗连通过为止  ,应该说刚刚最先  ,法式在运行历程中所泛起的问题  ,是算法设计有问题 ,说得更 玄点是对问题的熟悉和明白不够  ,还需要越发深入地测试、调试和修改  。一个法式  ,稍为庞大的法式  ,往往要经由多次的编译、毗连和测试、修改  。下面我们学习的 法式维护、调试工具和版本维护就是在法式调试、测试历程中使用的  ,用来解决调测阶段所泛起的问题