序言
记录一下编译的具体过程,我是菜狗,主要是写给自己看的。
*勘误:*后续的学习过程中发现,.i后缀是C语言后缀,而C++后缀其实是.ii**
小知识
编译过程:

指令
| 预处理 | g++ -E test.cpp -o test.ii |
|---|---|
| 编译 | g++ -S test.i -o test.s |
| 汇编 | g++ -c test.s -o test.o |
| 链接 | g++ test.o -o test.exe |
| 选项 | 含义 |
|---|---|
| -E | 进行预处理 |
| -S(upper) | 进行预处理和编译 |
| -c(lower) | 进行预处理、编译和汇编 |
| -o xx | 指定生成的文件名为xx |
开始实验
1.准备一个cpp文件
如下:

2.直接让其生成一个可执行文件
指令:
>>g++ hello.cpp -o hello.exe
>>
//然后再运行
>>./hello.exe
>>Yeah, you did it!

3.分步编译
①预处理
g++ -E hello.cpp -o hello.i
得到的结果如图:

可以看到,预处理将头文件拓展开来,足足有20000多行,而我们的代码只有十行左右。
②编译
g++ -S hello.ii -o hello.s
得到的结果如图:

可以看到,编译将我们的代码变成了汇编语言。
③汇编
g++ -c hello.s -o hello.o
得到的结果如图:

可以看到,汇编将原汇编语句转化为了二进制
但是这个文件还不可以执行,其中缺少依赖的库
./hello.o
结果:

④链接
g++ hello.o -o hello.exe
./hello.exe
成功执行:

至此,实验阶段结束
一些思考
如果我们要把两个cpp文件链接在一起呢?
这里我准备了两个文件,一个是hello.cpp,另一个是hello2.cpp
然后输入指令
g++ hello.cpp hello2.cpp -o hello.exe
./hello.exe
得到结果
