C++编译过程

整理一下比较常用的g++指令,现在的ide功能很强大,导致我们很难接触到底层的一些知识,比如编译的过程,你根本就不知道一段代码是怎样变成一个可执行程序的。但是想要成为一个技术大佬,这一关绕不开,早晚得学,今天整理一下。

编译的过程

以如下代码为测试用例

#include <iostream>
using namespace std;

//WDNMD
#define MAX 1000
int main()
{
	for(int i = 0;i < MAX;i++)
	{
		cout << i << endl;
	}
	return 0;
}

从源代码到可执行程序需要四步:

1、预处理: 主要是代码中头文件的替换,宏定义的替换,注释的消除,结果生成.i文件
2、编译: 将源代码转化为汇编代码,生成.s文件
3、汇编: 将汇编代码转化为目标代码(机器代码),生成.o文件
4、链接: 将目标代码链接起来,生成可执行程序

1、预处理

g++ -E test.cpp > test.i

这里将生成的预处理文件重定向到test.i中,否则会直接在终端中输出预处理代码
可以查看test.i文件,会发现注释全部消除了,头文件和宏也被替换了
 

2、编译

g++ -S test.cpp

上面的指令会生成test.s文件,打开后会发现全部都是汇编代码,我现在还没有学汇编,所以只能看出来这是汇编代码,具体内容我也看不懂。

如果使用-S参数生成test.s文件,则必须首先生成.i文件,否则会出错

3、汇编

g++ -c test.cpp

上面的指令会生成test.o文件,这里面全是二进制代码,可以使用vim 打开,然后使用指令:%!xxd转化为二进制的表示形式

4、链接

g++ -o test test.cpp

经过链接之后就会生成可执行程序,上面的是linux下的,如果是windows,应该使用

g++ -o test.exe test.cpp
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值