C编译过程

2023-11-26 09:42:21 浏览数 (2)

寻觅GCC

如果你已经安装了Clion,那么gcc就在根目录下。 如果没有,那么需要去minGW的官网下载安装。添加到环境变量中。

编写C代码

代码语言:javascript复制
#include <stdio.h>

#define ARRAY_SIZE(a) sizeof(a)/sizeof(a[0])
static int a = 123;

int main() {
    int i = 0;
    const char *msg = "hello";
    unsigned char b[3] = {1, 2, 3};
    char *result = (a > 0) ? "OK" : "FAIL";
    printf("666n");
    printf("%s ", msg);
    for (int i = 0; i < ARRAY_SIZE(b);   i) {
        printf("%d ", b[i]);
    }
    printf(" %s rn", result);
    return 0;
}

以肯哥讲义为例,命名为main.c

预编译

预编译包括宏展开、头文件包含、条件编译等。 在main.c所在文件夹执行命令:gcc -E -o test.i main.c 会得到test.i文件,这是一个文本文件,可以双击打开查看。

也可以使用gcc -E -o test.i main.c -P,得到简化的预编译文件,去掉了#注释。

编译

将预处理之后的C代码,编译成汇编代码,由高级语言代码翻译成低级语言代码。 将预编译后的源代码.i文件,编译后输出为汇编文件,后缀名一般用.s,输出仍然是文本文件。 gcc -S test.i -o test.s

汇编

将上一步生成的汇编代码,通过汇编器,将其转换成二进制目标代码,也就是.obj文件。 每一个.c文件编译到.obj文件,都需要经过预编译、编译、汇编三步。 输入汇编.s文件,输出指定平台的obj文件,后缀名一般用.o表示。这一步的结果是非文本文件。

链接

通过链接器,将上一步生成的二进制目标文件、启动文件、依赖的库文件,一并链接成一个可执行文件。 这一步的输出是对应平台的可执行文件,如Linux下的elf文件。 win下的指令为:gcc -o test.exe test.o

0 人点赞