【linux基础】Gcc编译选项

Gcc 有超过100个的可用选项,主要包括总体选项、警告和出错选项、优化选项和体系结构相关选项。以下对每一类中最常用的选项进行讲解。
1. 总体选项
Gcc的总结选项如表 3‑5所示,很多在前面的示例中已经有所涉及。

01.jpg (54.68 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

3 天前 上传

对于“-c”、“-E”、“-o”、“-S”选项在前一小节中已经讲解了其使用方法,在此主要讲解另外两个非常常用的库依赖选项“-I dir”和“-L dir”。
“-I dir”
正如上表中所述,“-I dir”选项可以在头文件的搜索路径列表中添加dir 目录。由于Linux中头文件都默认放到了“/usr/include/”目录下,因此,当用户要添加放置在其他位置的头文件时,就可以通过“-I dir”选项来指定,这样,Gcc就会到相应的位置查找对应的目录。比如在“/root/workplace/Gcc”下有两个文件:
/*hello1.c*/
#include<my.h>
int main()
{
printf("Hello!!\n");
return 0;
}
/*my.h*/
#include<stdio.h>
这样,就可在Gcc命令行中加入“-I”选项:
[root@localhost Gcc] gcc hello1.c –I /root/workplace/Gcc/ -o hello1
这样,gcc就能够执行出正确结果。
小知识
在include语句中,“<>”表示在标准路径中搜索头文件,而““ ””表示在本目录中搜索。故在上例中,可把hello1.c的“#include<my.h>”改为“#include “my.h””,就不需要加上“-I”选项了。
“-L dir”
选项“-L dir”的功能与“-I dir”类似,能够在库文件的搜索路径列表中添加dir 目录。例如有程序hello_sq.c需要用到目录“/root/workplace/Gcc/lib”下的一个动态库libsunq.so,则需要键入如下命令即可:
[root@localhost Gcc] gcc hello_sq.c –L
/root/workplace/Gcc/lib –lsunq –o hello_sq
需要注意的是,“-I dir”和“-L dir”都只是指定了路径,而没有指定文件,因此不能在路径中包含文件名。
另外值得详细解释一下的是“-l”选项,它指示Gcc去连接库文件libsunq.so。由于在Linux下的库文件命名时有一个规定:必须以l、i、b 这3 个字母开头。因此在用-l选项指定链接的库文件名时可以省去l、i、b 3个字母。也就是说Gcc在对“-lsunq”进行处理时,会自动去链接名为libsunq.so的文件。
2. (2)告警告和出错选项
Gcc的警告和出错选项如表 3‑6所示。

03.jpg (45.4 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

3 天前 上传

下面结合实例对这几个警告和出错选项进行简单的讲解。
如有以下程序段:
#include<stdio.h>
void main()
{
long long tmp = 1;
printf("This is a bad code!\n");
return 0;
}
这是一个很糟糕的程序,读者可以考虑一下存在哪些问题?
“-ansi”
该选项强制Gcc生成标准语法所要求的警告信息,尽管这还并不能保证所有没有警告的程序都是符合ANSI C标准的。运行结果如下所示:
[root@localhost Gcc]# gcc –ansi warning.c –o warning
warning.c: 在函数“main”中:
warning.c:7 警告:在无返回值的函数中,“return”带返回值
warning.c:4 警告:“main”的返回类型不是“int”
可以看出,该选项并没有找到“long long”这个无效数据类型的错误。
“-pedantic”
允许发出ANSI C标准所列的全部警告信息,同样也保证所有没有警告的程序都是符合ANSI C标准的。其运行结果如下所示:
[root@localhost Gcc]# gcc –pedantic warning.c –o warning
warning.c: 在函数“main”中:
warning.c:5 警告:ISO C90不支持“long long”
warning.c:7 警告:在无返回值的函数中,“return”带返回值
warning.c:4 警告:“main”的返回类型不是“int”
可以看出,使用该选项找出了“long long”这个无效数据类型的错误。
“-Wall”
允许发出Gcc能够提供的所有有用的报警信息。该选项的运行结果如下所示:
[root@localhost Gcc]# gcc –Wall warning.c –o warning
warning.c:4 警告:“main”的返回类型不是“int”
warning.c: 在函数“main”中:
warning.c:7 警告:在无返回值的函数中,“return”带返回值
warning.c:5 警告:未使用的变量“tmp”
使用“-Wall”选项找出了未使用的tmp变量,但它并没有找出无效数据类型的错误。另外,Gcc 还可以利用选项对单独的常见错误分别指定警告,有关具体选项的含义感兴趣的读者可以查看Gcc手册进行学习。
3. 优化选项
GCC具有优化代码的功能,代码的优化是一项比较复杂的工作,它可归为:源代码级优化、速度与空间的权衡、执行代码的调度。
GCC提供了下列优化选项:
-O0:默认不优化(若要生成调试信息,最好不优化)
-O1:简单优化,不进行速度与空间的权衡优化;
-O2:进一步的优化,包括了调度。(若要优化,该选项最适合,它是GNU发布软件的默认优化级别;
-O3:鸡肋,兴许使程序速度更慢;
-funroll-loops : 展开循环,会使可执行文件增大,而速度是否增加取决于特定环境;
-Os:生成最小执行文件;
一般来说,调试时不优化,一般的优化选项用-O2(gcc允许-g与-O2联用,这也是GNU软件包发布的默认选项),embedded可以考虑-Os。
4. 体系结构相关选项
Gcc的体系结构相关选项如表 3‑7所示。

04.jpg (49.18 KB, 下载次数: 0)

下载附件 保存到相册 设为封面

3 天前 上传

这些体系结构相关选项在嵌入式的设计中会有较多的应用,读者需根据不同体系结构将对应的选项进行组合处理。在本书后面涉及到具体实例会有针对性的讲解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值