在Linux下进行C语言编程,必须使用GNUGCC编译C源代码,生成可执行程序。
1. GCC 快速入门
Gcc指令的通常格式是: Gcc [选项] 要编译的文件 [选项] [目标文件]
其中ubuntu 编译c源码,目标文件可以默认,Gcc默认生成的可执行文件名为:compiled file.out
我们来看看经典的入门程序“HelloWorld!”
#vihello.c
#包括
#包括
无效主(无效)
printf("你好世界!rn");
用gcc编译来执行程序。
#gcchello.c
该命令会直接从hello.c生成最后的二进制补码可执行程序a.out
该命令意味着执行 (1) 预处理、(2) 汇编、(3) 编译和 (4) 链接以生成最终的二进制补码可执行程序。 这里没有指定输出文件,默认输出为a.out。
如何指定最后的二进制补码可执行程序名? 使用-o选项指定名称。例如需要生成执行程序hello.exe,所以
#gcchello.c-ohello.exe
二、GCC命令分析——四步
之前我们知道GCC编译源代码生成最终可执行的二进制补码程序。 GCC后台包括四个阶段的执行。
GCC编译C源代码分四步:
下面我们就利用GCC命令选项来一一分析GCC的流程。
1)预处理
在此阶段,编译器编译出C源代码中包含的头文件,例如stdio.h,用户可以使用gcc选项“-E”来查看。
用法:#gcc-Ehello.c-ohello.i
功能:预处理hello.c并输出hello.i文件。
2)编译阶段(Compiling)
第二步是编译阶段。 在这个阶段,Gcc首先需要检测代码的规范性,是否存在语句错误等,以确定代码中实际要做的工作。 检测正确后ubuntu 编译c源码,Gcc将代码翻译成汇编语言。 用户可以使用“-S”选项来查看。 该选项仅编译而不汇编并生成汇编代码。
选项
用法:[root]#gcc –Shell.i –ohello.s
功能:将预处理输出文件hello.i组装到hello.s文件中。
3)组装阶段(Assembling)
汇编阶段将编译阶段生成的“.s”文件转换为二进制补码目标代码。
选项-c
用法:[root]#gcc –chello.s –ohello.o
功能:编译汇编输出文件test.s,输出test.o文件。
4)链接阶段(Link)
编译成功后,进入链接阶段。
没有选项链接
用法:[root]#gcchello.o – ohello.exe
功能:将编译后的输出文件hello.o链接成最终的可执行文件hello.exe。
函数库通常分为两种类型:静态库和动态库。 静态库是指在编译链接时,将库文件的所有代码都添加到可执行文件中,因此生成的文件比较大,但运行时不再需要库文件。 它的后缀通常是“.a”。 动态库则相反,在编译和链接时并不将库文件的代码添加到可执行文件中。 相反,该库是在程序执行时由运行时链接文件加载的,这样可以节省系统开销。 动态库通常具有后缀“.so”。 如上所述,libc.so.6是一个动态库。 gcc编译时默认使用动态库。