首页 理论教育 Linux系统编程实践:gcc编译器的应用

Linux系统编程实践:gcc编译器的应用

时间:2023-11-18 理论教育 版权反馈
【摘要】:经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。图2.53O2选项的使用

Linux系统编程实践:gcc编译器的应用

●实验目的:

学会使用gcc编译器。

●实验要求:

编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-o2等选项。

●实验器材:

软件:安装了Linux的vmware虚拟机

硬件:PC机一台。

●实验步骤:

(1)先用vi编辑hello.c文件,内容如下:

#include <stdio.h>

int main(void)

{

printf("hello world\n");

return 0;

}

(2)gcc指令的一般格式为:

gcc [选项] 要编译的文件 [选项] [目标文件]

例:使用gcc编译命令,编译hello.c生成可执行文件hello,并运行hello。

[root@localhost gcc]# vi hello.c

[root@localhost gcc]# gcc hello.c-o hello

[root@localhost gcc]# ./hello

hello world

[root@localhost gcc]#

上面的命令将.c文件生成了可执行文件。gcc的4个编译流程:预处理、编译、汇编、连接一步完成,下面将介绍4个流程分别做了什么工作。

(3)-E选项的作用:只进行预处理,不做其他处理。

例:只对hello.c文件进行预处理,生成文件hello.i,并查看。

[root@localhost gcc]# gcc-E hello.c-o hello.i

[root@localhost gcc]# ls

hello hello.c hello.i

通过查看可以看到头文件包含部分代码#include <stdio.h>。经过预处理阶段之后,编译器已将stdio.h的内容贴了进来。

(4)-S选项的作用:只是编译不汇编,生成汇编代码。

例:将hello.i文件只进行编译而不进行汇编,生成汇编代码hello.s。(www.xing528.com)

[root@localhost gcc]#gcc -S hello.i–o hello.s

[root@localhost gcc]# ls

hello hello.c hello.i hello.s

[root@localhost gcc]#

(5)-c选项的作用:只是编译不链接,生成目标文件.o。

例:将汇编代码hello.s只编译不链接成hello.o文件。

[root@localhost gcc]# gcc -c hello.s-o hello.o

[root@localhost gcc]# ls

hello hello.c hello.i hello.o hello.s

(6)将编译好的hello.o链接库,生成可执行文件hello。

[root@localhost gcc]# gcc hello.o-hello

[root@localhost gcc]# ls

hello hello.c hello.i hello.hello.s

[rootalocalhost gcc]#./hello

hello world

(7)-static选项的作用:链接静态库。

例:比较hello.c链接动态库生成的可执行文件hello和链接静态库生成的可执行文件hello1的大小,如图2.52所示。

图2.52 链接静态库

可以看到静态链接库的可执行文件hello1比动态链接库的可执行文件hello要大得多,它们的执行效果是一样的。

(8)-g选项的作用:在可执行程序中包含标准调试信息。

例:将hello.c编译成包含标准调试信息的可执行文件hello2。

[root@localhost gcc]# gcc -g hello.c-o hello2

[root@localhost gcc]# ls

hello hello2 hello.i hello.s

hellol hello.c hello.o

带有标准调试信息的可执行文件可以使用gdb调试器进行调试,以便找出逻辑错误

(9)-O2选项的作用:完成程序的优化工作。

例:将hello.c用O2优化选项编译成可执行文件hello3,与正常编译产生的可执行文件hello进行比较,如图2.53所示。

图2.53 O2选项的使用

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

我要反馈