了解gcc的编译过程

先在msys2下gcc编译一个helloworld的C程序,默认没有gcc,

了解gcc的编译过程_第1张图片

用pacman安装,

了解gcc的编译过程_第2张图片 

安装好;

了解gcc的编译过程_第3张图片 

构建运行hello C程序;

了解gcc的编译过程_第4张图片 

根据网上一些资料,

GCC的编译包括四个阶段:预处理、编译、汇编和链接。分别使用了cc1、as和collect2三个工具。cc1是编译器,对应第一和第二阶段,用于将源文件hello.c编译为hello.s;as是汇编器,对应第三阶段,用于将hello.s汇编为hello.o目标文件;链接器collect2是对ld命令的封装,用于将C语言运行时库(CTR)中的目标文件(crt1.o、crti.o、crtbegin.o、crtn.o)以及所需的动态链接库(libgcc.so、libgcc_s.so、libc.so)链接到可执行hello。

看一下as是个汇编器,bin目录有as.exe;

了解gcc的编译过程_第5张图片 

编译的第一、二阶段用的是cc1,看一下bin目录有cc.exe;

了解gcc的编译过程_第6张图片 

没发现有它前面说的这个collect2,

了解gcc的编译过程_第7张图片 

按前面说的cc1能把.c文件生成.s文件,.s是汇编语言,不是x86的汇编;

输个 cc hello.c看一下;这个cc可能也是编译器,能生成exe文件;

了解gcc的编译过程_第8张图片 

查找一下cc1,在如下目录;

了解gcc的编译过程_第9张图片 

把hello.c也拷贝到此目录,执行 cc1 hello.c 命令,看上去不能运行此命令;

了解gcc的编译过程_第10张图片 

我看了一下资料,编译的第一阶段,用 gcc -E -o hello.i hello.c 先生成 .i  文件;

了解gcc的编译过程_第11张图片 

.i文件生成了,看一下非常大;

 了解gcc的编译过程_第12张图片

然后再用 gcc -S -o hello.s hello.i 命令,由.i文件生成.s文件;生成.s的汇编代码如下图;

了解gcc的编译过程_第13张图片 

 下回继续;

 

你可能感兴趣的:(VC++,Linux开发,linux,gcc,cc1)