●实验目的:
学会使用gcc编译器。
●实验要求:
编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-o2等选项。
●实验器材:
硬件: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选项的使用
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。