安卓运行exe文件_探究:HelloWorld背后的故事!在运行exe可执行文件前到底发生了什么?...

68fdc594896c37012e98a5cd24fb1986.png

人物介绍

610f25b32f89b991c513fd9daa79f3f6.png

故事简介

编写源文件 → 预编译 →编译 →汇编 → 链接

一、编写源文件

源代码:

463550389e7c6c7b168117bb44173e4d.png

二、预编译

预编译输入命令g++ -o HelloWorld.i -E HelloWorld.cpp

该命令表示编译环节的第一步,也就是预编译!当然,这一步也可以被称为“编译预处理”!而这个 HelloWorld.i 即是预编译过后的文件!

序号主要行为

9a9ee10fc5862bb57ae4d0fd48a42a12.png


值得注意:这一步不会做出任何安全性和合法性的检查!

三、编译

编译请输入命令g++ -o HelloWorld.s -S HelloWorld.i

该命令表示编译过程,也就是生成相应的汇编文件 HelloWorld.s 。

94a82b63da27b31517eeb00ecdcf4480.png


补充说明:其中语义分析又可以分为“静态语义分析”和“动态语义分析”两种。

b1b46c1370d5c61b72d9d9f2149c7840.png

四、汇编

汇编请输入命令:g++ -o HelloWorld.o -C HelloWorld.s

该命令表示对 HelloWorld.s 文件进行汇编处理,生成对应的可重定位的二进制文件 HelloWorld.o ,也就是我们所熟知的机器语言对应的文件。

五、链接

链接请输入命令:g++ HelloWorld.cpp -o HelloWorld.exe

通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可执行文件., 链接的主要内容是把各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。

需要指出:链接分为“静态链接”和“动态链接”。

3576f441418d16e40a94c764e82c425e.png

需要补充:

be0dc407845931f89beb4cdcbb1fee98.png


额外说明:

7f04a69a509c91ea73e114b96d251536.png

相册

预编译后的文件HelloWorld.i

6863d237ba09b3b5f9c9b54468e5adc7.png

可以看到,代码量惊人的大!足足有两万多行!可想这个HelloWorld也不简单啊!

编译后的文件HelloWorld.s

572512ab530d7990412ebfd0409823a8.png


很明显看出,此时代码精简了很多!

汇编后的文件HelloWorld.o

fbdbb2de19769e1f35710f8bf83c0792.png


可以看出,记事本已经显示乱码了!

帮忙的朋友

7e20e3f6999f10b65b5f4964110d1fa7.png


现在你知道了吗?千万不要小看这简单的一步哦!那只是我们眼睛所看到的而已~

学习C/C++编程知识,想要成为一个更加优秀的程序员,或者你学习C/C++的时候有难度,可以来笔者的C语言C++零基础编程学习圈,里面有学习视频和文件资料,还有更多志同道合的朋友,欢迎转行也学习编程的伙伴,和大家一起交流成长会比自己琢磨更快哦!

学习更多C/C++编程知识,欢迎关注笔者的学习专栏:

C/C++学习笔记​zhuanlan.zhihu.com
f43b9730ac9eab03fe0cc3b6d9af9097.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值