GCC编译器是Linux系统中最流行的编译系统,它的有点有两个:
1.GCC可以为X86,ARM等不同体系结构的硬件平台编译程序。
2.GCC可以编译数十种不同的高级语言,如C,C++,JAVA等。
GCC编译器的命令格式为:
gcc 选项 文件名 选项 文件名
而GCC拥有非常庞大的编译选项,主要分为一下几类:
(编译的流程为预处理-编译-汇编-链接(吧程序中所有的目标文件和所需的库文件连接在一起))
1.总体选项:控制编译的整个流程
1)-E 对源文件进行预处理(进行头文件展开等工作)
2)-S 对文件进行编译(进行语法检查(检查单词拼写以及语句语法,语义是否正确)并将文件转为汇编语言)
3)-c 对文件进行汇编(或编译)(将文件翻译成CPU可识别的二进制文件)
4)-o file 输出目标文件file
5) -v 显示编译阶段的命令
2.语言选项;用于支持各版本的C语言程序。
-ansi:支持符合ANSI标准的C语言程序
3.警告选项:用于控制编译过程中产生的各种警告信息
1)-W 屏蔽所有的警告信息
2)-Wall 显示所有类型的警告信息
3)-Werror 出现任何警告信息就停止编译
4.调试选项:用于控制调试信息。
-g 产生调试信息
5.优化选项:用于对目标文件进行优化
-01 对目标文件的性能进行优化
-02 在-01的基础上进一步优化,提高目标文件的运行性能
-03 在-02的基础上进一步优化,支持函数集成优化
-00 不进行优化
6.连接器选项:用于控制链接过程
-static 使用静态链接
-l(Library) 链接Library函数库文件
-L(dir)指定连接器的搜索目录dir
-shared 生成共享文件
7.目录选项:用于指定编译器的文件搜索目录
-I(dir)指定头文件的搜索目录
-L dir 指定都所目录dir
Glibc是GNU推出的C语言函数库,其中包含了大量的函数库,libc是最基本的函数库,每个C程序都要实用libc函数库,此外常用的还有数学库(libm),加密库(libcrypt)等,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)