该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105112748

从代码到可执行文件

  • 简介
  • 预处理
  • 编译
  • 链接

简介

我们以我们最初学到的“hello world”程序为例。这个程序在编译中是这样进行的,首先执行g++ helloworld.cpp命令得到a.out文件;执行./a.out命令就可以输出hello world!事实上执行g++ helloworld.cpp可以分为四个步骤,分别是预处理,编译,汇编,和链接,这就像一个被隐藏的过程,使用者可以通过简单的命令即可完成复杂的步骤。

预处理

首先是源代码文件helloworld.cpp和相关头文件预处理成一个.i文件。命令如下 g++ -E helloworld.cpp -o helloworld.i预处理的过程主要处理那些源代码文件中只能够以“#”开始的预处理指令,主要规则如下:
(1)将所以#define删除,并将宏定义展开。
(2)处理一些条件预编译指令如#if,#ifdef,#elif,#else,#endif等。将不必要的代码过滤掉。
(3)处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。这个过程

C/C++从代码到可执行文件相关推荐

  1. (2021) 18 [代码讲解] 可执行文件

    (2021) 18 [代码讲解] 可执行文件 南京大学操作系统课蒋炎岩老师网络课程笔记. 视频:https://www.bilibili.com/video/BV1HN41197Ko?p=18 讲义: ...

  2. Python GUI代码转为可执行文件(.exe)实例——进制转化器

    Python GUI代码转为可执行文件(.exe)实例--进制转化器 Python进制转换函数 转十进制 转二进制 转八进制 转十六进制 tkinter库 进制转换器源代码 生成可执行文件 Pytho ...

  3. Ubuntu下C++代码调用可执行文件。

    例如:已经存在一个编译好的c++可执行文件: 简单代码(第一个可执行文件) vim hello.cpp #include <iostream> using namespace std; i ...

  4. linux可执行文件怎么打开代码,linux可执行文件的加载和运行(转)

    四:a.out文件格式的加载 a.out模块的处理是在binfmt.aout.c中.如下示: static struct linux_binfmt aout_format = { .module    ...

  5. Golang多线程下载器(附代码、可执行文件)

    个人学习记录,欢迎提出不足之处~ 文章目录 1. 功能介绍(使用方法) 2. 完整代码(带少量注释) 3. 可执行文件(exe) 4. 下载器实现思想(待续) 5. 代码详细解析(待续) 1. 功能介 ...

  6. python代码打开可执行文件_将自己的Python代码打包成exe文件(更换设备可运行的)...

    1.这里使用到的第三方库是 pyinstaller,先安装该库 pip install pyinstaller 2.将python文件copy到python的安装目录下的Scripts目录下 3.打开 ...

  7. 详述 从代码如何到可执行文件 的过程和解耦

    文章目录 前言 gemfield.c 代码 第一步:编译. 第二步:有关可执行文件. 第三步:什么是ELF格式? 第四步:ELF头 第五步.ELF文件中的节头表 节头表的作用是什么呢? 第六步.摘选几 ...

  8. ncut算法matlab实现,ncut_multiscale_1_6 经典的图像分割算法 的Matlab代码。 238万源代码下载- www.pudn.com...

    文件名称: ncut_multiscale_1_6下载 收藏√  [ 5  4  3  2  1 ] 开发工具: matlab 文件大小: 587 KB 上传时间: 2015-04-17 下载次数: ...

  9. 代码里-3gt;gt;1是-2但3gt;gt;1是1,-3/2却又是-1,为什么?

    之前群里有个同学向大家提出了类似这样的问题.随后这位同学公布了答案:右移运算是向下取整,除法是向零取整.这句话对以上现象做了很好的总结,可是本质原因是什么呢? 我一直以为-3>>1的结果是 ...

最新文章

  1. Learn OpenGL (六):坐标系统
  2. 今日arXiv精选 | 15篇ICCV 2021最新论文
  3. windows下ping命令的结果前加上系统的当前时间
  4. SharePoint Manager 2007 国外高人写的管理工具,有特色,对学习moss有帮助
  5. BZOJ2388: 旅行规划
  6. Python——高阶函数
  7. 数据:Uniswap V3的24小时交易量已超过2亿美元
  8. (xd mac直装版)支持m1完美支持m1完整详细教程
  9. Java开发中,接口参数校验
  10. 怎样停止魅族系统的推送服务器,实测可行!如何关闭魅族flyme系统的自带应用推送-魅蓝屏蔽设置...
  11. VS2013 百度云资源以及密钥
  12. 【考研政治】马克思主义基本原理概论——导论篇
  13. 计算机cpu位数是啥,怎么看电脑cpu的位数
  14. 帆软软件FineReport考试题库FCRA题库
  15. Lipschitz 条件或者Lipschitz连续
  16. Java程序员工资尤其的高,具体原因是什么呢?
  17. 收集LOGO生成网站(持续更新)
  18. Java 编写程序打印以下图形_怎么用java编写如下程序在屏幕上输出如下图形 * *** *** * 循环语句做(if语句)...
  19. Python 获取当前时间 年-月-日-时-分-秒
  20. 英语商务对话和英语商务谈判技巧

热门文章

  1. 学不好Web前端的几个原因总结
  2. 前端基础之JavaScript_2
  3. 爬虫笔记:Python Selenium详解
  4. OpenCASCADE: Code::Blocks构建OCCT
  5. OpenCASCADE:教程概述
  6. boost::with_lock_guard相关的测试程序
  7. 用作键提取器的函数的 Boost.MultiIndex 示例
  8. boost::mpl模块实现list相关的测试程序
  9. boost::log::parse_formatter用法的测试程序
  10. boost::hana::take_front用法的测试程序