【Linux学习笔记】gcc编译单个文件

  1. 编译程序的基本知识
    GCC编译器对程序的编译如图所示,分为四个阶段:预编译,编译和优化,汇编和链接。

    【Linux学习笔记】gcc编译单个文件_第1张图片

    源文件:存放可编辑代码的文件,如存放C,C++和汇编语言的文件。
    目标文件:经过编译器编译生成的CPU可识别的二进制代码,但是目标文件一般不能执行,因为其中有一些函数过程没有相关的指示和说明。
    可执行文件:目标文件与相关的库链接后的文件它是可以执行的。

    预编译过程将程序引用的头文件包含进源代码中,并对一些宏进行替换。
    编译过程将用户可识别的语言翻译成一组处理器可识别的操作码,生成目标文件,通常翻译成汇编语言,而汇编语言和机器操作码之间是一种一对一的关系。
    所有目标文件必须用某种方式组合起来才能运行,这就是链接的作用。目标文件中通长仅解析了文件内部的变量和函数,对于引用的函数和变量还没有解析,这需要将已编写好的目标文件引用进来,将没有解析的变量和函数进行解析,通常引用的目标是库。链接完成后会生成可执行文件。

  2. 单个文件编译成可执行文件
    在Linux下用GCC编译单个文件直接使用gcc命令后面加上要编译的C语言源文件,GCC会自动生成文件名为a.out的可执行文件。
    下面是一个程序的源代码

/*hello.c*/
#include
int main()
{
    printf("hello world\n");
    return 0;
}

将代码存入hello.c文件中,运行如下命令将代码编译成可执行文件。

$gcc hello.c

使用上述命令编译时,GCC先进行扩展名判断,选择编译器。由于hello.c扩展名为.c,所以选择gcc编译器进行编译。
GCC将采用默认步骤,先将C文件编译成目标文件,然后将目标文件连接成可执行文件,最后删除目标文件。上述命令没有指定生成可执行文件的名称,所以生成磨人的文件名a.out。运行结果如下:

$./a.out        (执行可执行文件a.out)
hello world

可使用-o选项使编译程序生成指定文件名,例如生成一个叫做test的可执行文件:

$gcc -o test hello.c

3.编译生成生成目标文件
GCC的-c选项用于生成目标文件,默认情况下生成的目标文件与源文件名称一样,只是扩展名为.o。例如下面的命令会生成名为hello.o的目标文件:

$gcc -c hello.c

如果需要指定生成的文件名,可以使用-o选项。

$gcc -c -o test.o hello.c

可以一条命令编译多个源文件,生成目标文件。通常用于编写库文件或者项目中包含多个源文件时。

$gcc -c file1.c file2.c file3.c

你可能感兴趣的:(Linux,linux,gcc)