gcc

来源:互联网 发布:windows 8 10 whql 编辑:程序博客网 时间:2024/06/05 17:21


GCC

linux平台上,最流行的编译系统是GCCGCC也是GNU发布的最著名软件之一。GCC的功能非常强大,主要体现在两方面。

   1GCC可以为X86ARMMIPS等不同体系结构的硬件平台编译程序。

   2GCC可以编译CC++JAVAPascal等数十种不同的高级语言。

gcc命令的使用格式格式为:

   gcc  [选项] [ 文件名]  [选项]  [文件名]

gcc命令拥有数量庞大的编译选项,按类型可以把选项分为以下几大类。

1)总体选项:控制编译的整个流程

  常用选项:

  -E 对源文件进行预处理(进行头文件展开等工作)

    -S对文件进行编译(进行语法检查(检查单词拼写以及语句语法,语义是否正确)并将文件转为汇编语言)

    -c对文件进行汇编(或编译)(将文件翻译成CPU可识别的二进制文件)

    -ofile输出目标文件file

    -v显示编译阶段的命令

2)语言选项;用于支持各版本的C语言程序。

  常用选项:

   -ansi:支持符合ANSI标准的C语言程序

3)警告选项:用于控制编译过程中产生的各种警告信息

   常用选项:

    -W屏蔽所有的警告信息

    -Wall显示所有类型的警告信息

    -Werror出现任何警告信息就停止编译

 ( 4 )调试选项:用于控制调试信息。

  常用选项:

    -g 产生调试信息

 ( 5 )优化选项:用于对目标文件进行优化

  常用选项:

   -01  对目标文件的性能进行优化

   -02  -01的基础上进一步优化,提高目标文件的运行性能

   -03  -02的基础上进一步优化,支持函数集成优化

   -00  不进行优化

 ( 6 )连接器选项:用于控制链接过程

   常用选项:

  -static  使用静态链接

    -lLibrary链接Library函数库文件

    -Ldir)指定连接器的搜索目录dir

   -shared生成共享文件

 ( 7 )目录选项:用于指定编译器的文件搜索目录

    常用选项:

  -Idir)指定头文件的搜索目录

-L dir指定都所目录dir

GCC工作流程

C程序的编译过程中,依次要进行预处理、编译、汇编、连接四个阶段。11. 预处理阶段展开头文件

2.编译阶段三步骤

  (1)词法分析:主要负责检查关键字、标识符等是否正确。

   (2)语法分析:主要负责检查程序中语句的语法是否正确

  (3) 语义分析:主要负责检查程序中语句的逻辑意义是否正确

3.汇编阶段把汇编程序翻译成CPU可以识别的二进制文件

4.连接阶段test.o文件和所需的库文件连接起来

 

Glibc

GlibcGNU推出的C语言函数库,其中包含了大量的函数库,其中,libc是最基本的函数库,每个C程序都要实用libc库,此外常用的还有数学库libm、加密库libcryp、POSIX线程库libpthread等.

C程序在调用Glibc中的函数库时,需要引用与函数库对应的头文件,同时在编译命令中需要加入某些函数库的链接参数,并使用符号-l进行连接,比如函数库libm的链接参数为m等,如:

gcc选项文件名选项文件名 -lm

Glibc一般分布在/lib/usr/lib目录下,其中/lib目录下的函数库文件主要是给/bin目录下的系统程序使用的,而/uer/bin目录中的函数库文件主要是给/usr目录下的用户程序使用的。函数库文件后缀不同,其性质也不同:

    a   静态库文件

    la :用来记录库文件信息的动态库文件

    so :动态库文件

使用动态链接方式i编译程序时,动态库的符号链接文件会写入二进制文件中,这样,程序在运行时就可以通过符号链接找到指定的动态库文件了。

通过选项-static可以使用静态链接方式对程序进行编译(例: gcc  -static  test.c  -o  test