在Linux中,如果需要将一个C语言文件变得可以执行,那么除了这个文件本身的内容是C语言编写的内容外,还需要gcc这个编译工具进行编译才行。
- gcc 使用的格式方法:
-
- gcc 要编译的文件
-
- //在该代码下,gcc默认会将编译后的可执行文件改名为 a.out
-
- //但是这种编译方式是最新版本的,老版本可能不支持,所以在编译的过程中需要一点改变
-
- gcc 需要编译的文件 -std=c99
-
- //而若想要换一个名字,使得编译出的文件不在是a.out 则需要使用以下代码
-
- gcc 需要编译的文件 -o 新名字 -std=c99
-
- //或是
-
- gcc -o 新名字 需要编译的文件 -std=c99

另外,用于编译c++的g++命令也可以编译C语言,且g++编译c++的方法和gcc编译C语言的方法大致相同,但不同的是gcc并不能编译c++
预处理(Pre-Processing):这个阶段主要处理源文件中的#indef、#include和#define预处理命令;这里主要是把一些include的头文件和一些宏定义,放到源文件中。
输入:中间文件*.i
输出:编译后生成汇编编语言文件*.s
这个阶段对应的gcc命令如下:#gcc -S(汇编) test.i -o test.s(汇编编语言文件)
说明:它通过对源文件test.c使用S选项来生成汇编文件test.s
#gcc -c(编译) test.s -o test.o在功能上,预处理、编译、汇编是3个不同的阶段
但gcc在实际操作时可以把这3个步骤合并为一个步骤来执行,即使用 -c选项:
- 输入文件:源码*.c文件
- 输出文件:二进制机器代码*.o
- 这个阶段对应的gcc命令如下:
# gcc –c test.c -o test.o
// -o指定了output_filename
#gcc (没有选项符号) test.o example.o -o test
链接是库和程序的结合,当一个语言被发明的时候是有一套标准的,而这个库也就表示着语言的标准库。
当然,库也分类,在Linux中分为两种,第一种是动态库,通常以.so为后缀,且链接一般默认使用的库就是动态库,而另一种是静态库,是以.a为后缀的,并且在Linux中默认是没有静态库的存在,所以需要自己安装。
sudo yum install -y glibc-static libstdc++-static
gcc -o 指定名字 链接的文件 -static
优缺对比:
- C动态库,默认提供的
- gcc默认形成的可执行程序,默认采用动态链接
动态库&&动态链接的优缺点:
- 不能丢失
- 节省资源
静态库&&静态链接的优缺点:
- 一旦形成,和库无关
- 浪费资源