GCC使用指南

一 GCC概述(gcc.gnu.org):

(1)GCC可同时编译C程序和C++程序。

*gcc命令只能编译C++源文件,而不能和C++程序使用的库链接。因此,通常用g++命令来完成对C++程序的编译和链接,该程序会自动调用gcc实现编译。

*编译系统出错时,注意是编译错误还是链接错误。


二 gcc常用选项:


(一)常用编译选项:

*-E:只进行预处理,不编译和汇编。

*-S:编译,但是不汇编和链接。生成后缀名为.s的文件。

*-c:编译和汇编,但是不链接。生成目标文件,后缀名为.o文件。

*-o<file>:指定输出到文件file中。

*-M:自动寻找源文件中包含的头文件,并生成一个依赖关系(make使用)。

*-MM:同-M,但是"-M"参数会把标准库的头文件也包含进来,-MM则不包含。

(二)调试选项:

*-g:生成调试信息。GNU调试器(gdb)可利用该信息。


(三)优化选项(缺省:-O0不优化;推荐:-O2):

(1)-O0是缺省值:关闭所有优化选项。

(2)-O1或-O:最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。

(3)-O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。

(4)-O3:最高最危险的优化等级。用这个选项会延长编译代码的时间。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为。

(5)-Os:优化size。包括了所有-O2的优化并且不增加代码大小。



(四)预处理选项:

*-I<direction>:指定include文件的目录。

*-Wall:尽可能多的产生警告信息。


(五)链接选项(link option)

*-L<direction> 及-l<库名> 参数放在后面.其中,-L 加载库文件路径,-l 指明库文件名字(动态库时有所不同,参考静态库与动态库文章)


*-static:默认情况下, GCC在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库,如果需要的话可以在编译时加上-static选项,强制使用静态链接库。

*-shared:produce a shared object which can then be linked with other objects to form anexecutable.

*-fPIC:PIC(position independent code):用来生成共享库。如:gcc -fPIC -shared -o libmylib.so mylib.c。如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置。这样就丧失了共享库的好处,实际上和静态库的区别并不大,在运行时占用的内存是类似的,仅仅是二进制代码占的硬盘空间小一些.而且在加载时才重定位的开销也很大。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值