1.3.1 GCC概述
1.3.2 GCC编译流程分析
1.3.3 GCC警告提示
1.3.4 GCC使用库函数
1.3.5 GCC代码优化
GCC除了能支持C语言外,目前还支持Ada语言、C++语言、Java语言、Objective C语言、PASCAL语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等
GCC的编译流程分为了4个步骤,分别为
预处理(Pre-Processing)
编译(Compiling)
汇编(Assembling)
链接(Linking)
GCC使用的基本语法为:
gcc [option | filename]
预处理阶段
gcc –E –o [目标文件] [编译文件]
选项“-E”可以使编译器在预处理结束时就停止编译
选项“-o”是指定GCC输出的结果。
编译阶段
gcc –S –o hello.s hello.i
选项“-S”能使编译器在进行完编译之后就停止
GCC使用的基本语法为:
gcc [option | filename]
汇编阶段
gcc –c hello.s –o hello.o
选项“-c”把编译阶段生成的“.s”文件生成目标文件 “.o”
链接阶段
gcc hello.o –o hello
可以生成可执行文件
Wall类警告提示
(1)“-ansi”
该选项强制GCC生成标准语法所要求的告警信息,尽管这还并不能保证所有没有警告的程序都是符合ANSI C标准的。
(2)“-pedantic”
该选项允许发出ANSI C标准所列的全部警告信息,同样也保证所有没有警告的程序都是符合ANSI C标准的。
Linux函数库介绍
Linux中函数库包括两类:静态库和共享库。
静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库是在程序开始运行时被加载。
系统中可用的库都安装在/usr/lib和/lib目录下。库文件名由前缀lib和库名以及后缀组成。根据库的类型不同,后缀名也不一样。
相关路径选项
(1)“-I <dir>”
GCC使用缺省的路径来搜索头文件,如果想要改变搜索路径,用户可以使用“-I”选项。“-I<dir>”选项可以在头文件的搜索路径列表中添加<dir>目录。这样,GCC就会到指定的目录去查找相应的头文件。
(2)“-L <dir>”
选项“-L <dir>”的功能与“-I <dir>”类似,其区别就在于“-L”选项是用于指明库文件的路径。
gcc hello_sq.c –L/root/workspace/gcc/lib –lsunq –o hello_sq
使用不同类型链接库
使用不同类型的链接库的方法很相似,都是使用选项是“-l”(注意这里是小写的“L”)。该选项是用于指明具体使用的库文件。由于在Linux中函数库的命名规则都是以“lib”开头的,因此,这里的库文件只需填写lib之后的内容即可。
gcc -o dynamic -L /root/lq/testc/lib/dynamic.o -lmydynamic
GCC可以对代码进行优化,它通过编译选项-On来控制优化代码的生成,其中n是一个代表优化级别的整数。
虽然优化选项可以加快代码的运行速度,但对于调试而言将是一个很大的挑战。因为代码在经过优化之后,原先在源程序中声明和使用的变量很可能不再使用,控制流也可能会突然跳转到其他的地方,循环语句也有可能因为循环展开而变得到处都有,所有这些都将使调试工作异常艰难。