首页 理论教育 GCC编译器主要参数详解

GCC编译器主要参数详解

时间:2023-11-16 理论教育 版权反馈
【摘要】:表4.5GCC编译器的主要参数当头文件与GCC不在同一目录下要用-I dir编译,它是指头文件,而添加库文件时需用-L dir参数。gcc 4-11.c -o 4-11编译器提示出错。gcc 4-13.c -o 4-13 -pedantic步骤5:允许发出GCC提供的所有有用的告警信息。例4.14设计一个程序,要求循环8亿次左右,每次都有一些可以优化的加减乘除运算,比较GCC的编译参数“-On”优化程序前后的运行速度。

GCC编译器主要参数详解

1.总体参数

GCC编译器的主要参数如表4.5所示。

表4.5 GCC编译器的主要参数

当头文件与GCC不在同一目录下要用-I dir编译,它是指头文件,而添加库文件时需用-L dir参数。

例4.11 设计一个程序,要求把输入的字符串原样输出,程序中的头文件用户自定义,源程序文件为“4-11.c”,自定义的头文件为“my.h”,放在目录“/root”下。

步骤1:设计编辑源程序代码4-11.c。

#vim 4-11.c

在4-11.c文件中输入以下程序代码:

步骤2:设计编辑自定义的头文件my.h。

#vim my.h

/*my.h程序:自定义的头文件*/

#include < stdio.h> /*文件预处理,包含标准输入输出库*/

步骤3:正常编译4-11.c文件。

gcc 4-11.c -o 4-11

编译器提示出错。

步骤4:加“-I dir”参数编译。

[root@localhost root]#gcc 4-11.c –o 4-11 –I /root

注意:在include语句中,“<>”表示在默认路径“/usr/include”中搜索头文件,引号“ ”表示在本目录中搜索。因此,把前面4-10.c中的“#include <my.h>”改成“#include“my.h””,就不需要“-I dir”参数也能正确编译了。

getchar函数说明如表4.6所示。

表4.6 getchar函数

putchar函数说明如表4.7所示。

表4.7 putchar函数

使程序4-11.c用到目录“/root/lib”下的一个动态库libsunq.so:

gcc 1-5.c –o 1-5.c –L /root/lib –lsunq

Linux下的库文件命名时有一个规定:必须以l、i、b三个字母开头,因此,在用“-l”指定链接库文件时可以省去l、i、b三个字母。也就是说“-llibsunq”有时候写成“-lsunq”。

例4.12 设计一个程序,要求把输入的数字作为X轴坐标,算出它的sin值。

步骤1:编辑源程序代码。

vim 4-12.c

在4-12.c文件中输入以下程序代码:

步骤2:用gcc编译程序

gcc 4-12.c -o 4-12

结果发现编译器报错:

原因是需要指定函数的具体路径来查找函数sin,输入:

nm -o /lib/*.so|grep sin

在/lib/libm-2.3.2.so:00008610 W sin中除去函数库头lib及函数的版本号-2.3.2,所余下的符号为“m”,在编译时用字符“l”与余下的符号“m”相连成“lm”,在编译时加上此参数就能正确地通过编译,即:

gcc 4-12.c -o 4-12 -lm

步骤3:运行程序。

./4-12

注意:Linux下动态链接库默认后缀名为“.so”,静态链接库默认后缀名为“.a”。

GCC的常用告警和出错参数如表4.8所示。(www.xing528.com)

表4.8 GCC的常用告警和出错参数

例4.13 设计一个程序,要求打印“这是一段用于测试的垃圾程序!”,里面包含一些非标准语法。

步骤1:设计编辑源程序代码。

[root@localhost root]#vim 4-13.c

在4-13.c文件中输入以下程序代码:

步骤2:关闭所有告警。

gcc 4-13.c -o 4-13 -w

步骤3:显示不符合ANSI c标准语法的告警信息。

gcc 4-13.c -o 4-13 -ansi

步骤4:允许发出ANSI c标准所列的全部警告信息。

gcc 4-13.c -o 4-13 -pedantic

步骤5:允许发出GCC提供的所有有用的告警信息。

gcc 4-13.c -o 4-13 -Wall

2.优化参数

代码优化指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合,目的是改善程序的执行性能。

GCC提供的代码优化功能非常强大,它通过编译参数“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。

通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。

例4.14 设计一个程序,要求循环8亿次左右,每次都有一些可以优化的加减乘除运算,比较GCC的编译参数“-On”优化程序前后的运行速度。

步骤1:编辑源程序代码。

在4-14.c文件中输入以下程序代码:

步骤2:不加任何优化参数进行编译。

gcc 4-14.c -o 4-14

步骤3:用time命令大致统计出该程序在运行时所需要的时间。

time./4-14

运行结果:

3200002029.000000

real om16.763s

user om16.615s

sys om0.004s

步骤4:加“-O2”优化参数进行编译。

gcc 4-14.c -o 4-14 -O2

步骤5:再统计优化后的程序运行时所需要的时间。

time./4-14

运行结果:

3200002029.000000

real om6.255s

user om6.187s

sys om0.004s

步骤6:对比两次执行的输出结果。

优化虽然能够给程序带来更好的执行性能,但在一些场合中应该避免优化代码:

(1)程序开发的时候。

(2)资源受限的时候。

(3)跟踪调试的时候。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈