GCC概述

2012-12-10来源 : 互联网

GCC(GNU Compiler Collection)是目前Linux下*常用的C语言编译器,它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。GCC不仅功能非常强大,结构也异常灵活。下面对于GCC做一些简单的介绍。

GCC编译运行程序命令会像是这样:gcc xxx.c –o xxx 虽然看起来很简单,但是从编译器的角度看,却需要完成一系列繁杂的工作。我们一步一步来分析编译步骤。

*先,GCC需要调用预处理程序,由它负责展开源文件中定义的宏,并向其中插入预编译语句所包含的内容,使用参数“-E”可以让GCC在预处理结束后停止编译过程:# gcc -E xxx.c -o xxx.i,此时若查看xxx.i文件中的内容,会发现预编译的内容确实都插到文件里去了,而其它应当被预处理的宏定义也都做了相应的处理。

下一步,将xxx.i编译为目标代码,这里可以通过使用“-c”参数来完成:# gcc -c xxx.i -o xxx.o,注意GCC默认将.i文件看成是预处理后的C语言源代码,因此上述命令将自动跳过预处理步骤而直接开始执行编译过程。

*后一步,是将生成的目标文件链接成可执行文件:# gcc xxx.o -o xxx,一般具有一定规模的程序是由多个源文件组成的,相应地也就形成了多个编译单元,使用GCC能够很好地管理这些编译单元。

假设有一个由foo1.c和foo2.c两个源文件组成的程序,为了对它们进行编译,并*终生成可执行程序foo,可以使用下面这条命令:# gcc foo1.c foo2.c -o foo,如果同时处理的文件不止一个,GCC仍然会按照预处理、编译和链接的过程依次进行。如果深究起来,上面这条命令大致相当于依次执行如下三条命令:

# gcc -c foo1.c -o foo1.o

# gcc -c foo2.c -o foo2.o

# gcc foo1.o foo2.o -o foo

在编译一个包含许多源文件的工程时,若只用一条GCC命令来完成编译是非常浪费时间的。假设项目中有100个源文件需要编译,如果像上面那样仅用一条GCC命令来完成编译工作,那么GCC需要将每个源文件都重新编译一遍,然后再全部连接起来。很显然,这样浪费的时间相当多,尤其是当用户只是修改了其中某一个文件的时候,**没有必要将每个文件都重新编译一遍,因为很多已经生成的目标文件是不会改变的。要解决这个问题,关键是要灵活运用GCC,同时还要借助像Make这样的工具。

在开发软件的过程中,很多时候我们都需要第三方库函数。GCC在编译时有自己的办法来查找所需要的文件,“-I”选项可以向GCC的头文件搜索路径中添加新的目录。同样,如果使用了不在标准位置的库文件,那么可以通过-L选项向GCC的库文件搜索路径中添加新的目录。

GCC提供的代码优化功能非常强大,它通过编译选项-On来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的GCC来讲,n的取值范围及其对应的优化效果可能并不**相同,比较典型的范围是从0变化到2或3。通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。一般来说我们都使用-O2选项,因为它在优化长度、编译时间和代码大小之间,取得了一个比较理想的平衡点。

 

免责声明内容来源于网络,本站不保证所有内容的完整性、真实性和准确性,如有侵权请及时联系,我们核对情况属实,对该内容进行下架删除。[删除申请]

咨询项目,请扫微信二维码。
微信扫码
在线咨询
领取资料
微信扫一扫、长按二维码、点击“在线咨询”,发送项目名或品牌名,立即咨询加盟项目。

温馨提醒创业有风险,投资需谨慎。为规避加盟投资风险,3158招商加盟网建议您在投资前务必多考察、多了解,降低创业风险。

©2004 3158招商加盟网. All Rights Reserved.

3158招商加盟网友情提示:投资有风险,选择需谨慎