1、程序如何生成和运行

news2024/9/19 16:11:34

程序如何生成和运行

  • 一、生成可执行文件
    • 1、 源文件
    • 2、 预处理:`g++ -E hello.cpp -o hello.i` //将头文件,宏定义等替换到源文件
    • 3、 编译:`g++ -S hello.i -o hello.s` // 生成汇编代码
    • 4、 汇编:`g++ -c hello.s -o hello.o` // 生成二进制目标代码
    • 5、 链接:`g++ hello.o -o hello` // 生成可执行文件
  • 二、运行可执行程序

一、生成可执行文件

生成可执行程序要经过以下几步:预处理——编译——汇编——链接
在这里插入图片描述

预处理:g++ -E test.cpp -o test.i
编译:g++ -S hello.i -o hello.s
汇编:g++ -c hello.s -o hello.o
链接:g++ hello.o -o hello

// 常用操作:
g++ -c hello.cpp -o hello.o
g++ hello.o -o hello
g++ hello.cpp -o hello
./hello

1、 源文件

// hello.h
void foo() {
   int c = 0;
   int d = 1;
}
// hello.cpp
#include "hello.h"
int main() {
   int a = 0;
   int b = a;
   foo();
   return 0;
}

在这里插入图片描述

2、 预处理:g++ -E hello.cpp -o hello.i //将头文件,宏定义等替换到源文件

// hello.i
# 0 "hello.cpp"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "hello.cpp"
# 1 "hello.h" 1
void foo() {
    int c = 0;
    int d = 1;
}
# 2 "hello.cpp" 2
int main() {
    int a = 0;
    int b = a;
    foo();
    return 0;
}

在这里插入图片描述

3、 编译:g++ -S hello.i -o hello.s // 生成汇编代码

// hello.s部分代码
main:
.LFB1:
	.cfi_startproc
	endbr64
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	subq	$16, %rsp
	movl	$0, -8(%rbp)
	movl	-8(%rbp), %eax
	movl	%eax, -4(%rbp)
	call	_Z3foov
	movl	$0, %eax
	leave
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc

在这里插入图片描述

4、 汇编:g++ -c hello.s -o hello.o // 生成二进制目标代码

// hello.o部分代码

在这里插入图片描述
在这里插入图片描述

5、 链接:g++ hello.o -o hello // 生成可执行文件

在这里插入图片描述

二、运行可执行程序

在这里插入图片描述
可执行程序是存储在磁盘中,当我们运行程序时,可执行程序将加载到内存中,然后有一个进程在运行该代码,进程运行在进程的虚拟内存空间,下面是虚拟内存空间的基本分布。
在这里插入图片描述

参考
bilibili-Jonases-c++

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【区块链 + 基层治理】链动社区:基于 FISCO BCOS 的智慧社区数字化治理平台 | FISCO BCOS应用案例

“链动社区——基于 FISCO BCOS 的智慧社区数字化治理平台”是智慧社区治理服务一套完整系统&#xff0c;通过使用 FISCO BCOS 联盟链方案进行社区数据管理&#xff08;积分交易数据和行为数据等&#xff09;、对社区工作进行数字化支持&#xff0c;激发社区治理的多元主体参与…

Linux相关概念和重要知识点(1)(交互方式、存储结构、定位方式)

1.Linux是什么&#xff1f; Linux是一款继Unix之后开发的一款开源操作系统。 操作系统是基础性系统软件&#xff0c;是人机交互的一个媒介&#xff0c;我们日常使用的Windows、iOS、Android都是操作系统&#xff0c;用户都是和操作系统打交道的。像Windows、iOS是闭源的&…

【西电电装实习】流水灯(高级贴片焊接练习)

前言 说明书 左边实现流水&#xff0c;右边实现灯&#xff0c;灯与灯之间独立 此练习板具有功能 注意事项 不能焊错芯片&#xff0c;会影响功能先焊右侧比较好焊的用万用表检测电路质量 引脚序号 有圆点是第一个脚&#xff0c;然后逆时针按自然数顺序标引脚

随手记:uniapp小程序登录方式和小程序使用验证码登录

小程序登录方式&#xff1a; 方式一&#xff1a;小程序授权登录 通过uni.login获取 临时登录凭证code&#xff0c;向后端换取token。 <u-button type"primary" shape"circle" click"login">登 录</u-button>login() {uni.login({p…

零基础国产GD32单片机编程入门(十六)DMA详解及ADC-DMA方式采集含源码

文章目录 一.概要二.GD32F103C8T6单片机DMA外设特点三.GD32单片机DMA内部结构图四.DMA各通道请求五.GD32F103C8T6单片机ADC-DMA采集例程六.工程源代码下载七.小结 一.概要 基本概念&#xff1a; DMA是Direct Memory Access的首字母缩写,是一种完全由硬件执行数据交换的工作方式…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境:Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境,而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误,提示需要一个可用的套件。 解决办法: 点击+号创建新的套件…

迈向新一代星地融合的高速测试解决方案

一、面向未来下一代通信技术的射频测试挑战 移动通信网络的发展如下图所示&#xff0c;1G时代用模拟信号传输&#xff0c;实现了语音传输业务&#xff1b;2G时代&#xff0c;数字传输取代了模拟传输&#xff0c;人们能够使用手机短信和手机上网&#xff1b;3G时代&#xff0c;…

推动生态系统架构创新与可持续发展的关键引擎——The Open Group 2024年度大会全解析

在当今快速变化的数字化转型浪潮中&#xff0c;开放标准正逐渐成为推动企业创新和生态系统架构发展的重要力量。为了帮助企业在实现可持续发展的道路上加速推进&#xff0c;The Open Group 2024生态系统架构与可持续发展年度大会将为架构师、技术专家以及企业CIO、CTO提供一个深…

直流充电桩测试仪优势和特点

直流充电桩测试仪是一种专门用于检测和测试直流充电桩性能的设备。它的主要功能是对充电桩的各项参数进行精确测量&#xff0c;确保其正常工作&#xff0c;提高充电效率和安全性。以下是直流充电桩测试仪的优势和特点&#xff1a; 1. 高精度测量&#xff1a;直流充电桩测试仪具…

【AcWing】861. 二分图的最大匹配(匈牙利算法)

匈牙利算法&#xff0c;他可以在比较快的时间复杂度之内告诉我们左边和右边成功匹配的最大数是多少 匹配指的是边的数量&#xff0c;成功的匹配指的是两个未被使用的点之间存在一条边(就不存在两条边共用了一个点的)。 匈牙利算法可以返回成功匹配的最大匹配数是多少。 #incl…

【AcWing】860. 染色法判定二分图

二分图&#xff0c;把所有点划分到两边去&#xff0c;使得所有边都是在集合之间的&#xff0c;集合内部没有边。 一个图是二分图&#xff0c;当且仅当图中不含奇数环(环的边数是奇数)。这是个充分必要条件&#xff0c;是二分图就一定不含奇数环&#xff1b;不含奇数环就一定是…

工业设备网关在智能工厂建设中发挥的作用,以某汽车制造厂为例

在当今工业4.0的大潮中&#xff0c;智能化和数字化已经成为制造业发展的关键驱动力。工业设备网关&#xff0c;作为连接工业现场设备与上层系统的纽带&#xff0c;其作用不可小觑。本文将以某汽车制造厂的智能化改造项目为例&#xff0c;详细探讨工业设备网关在实际应用中的优势…

CS5363|CS5263升级方案|DP转HDMI 4K60HZ芯片方案

CS5363是一种高度集成的单芯片&#xff0c;适用于多个细分市场和显示应用&#xff0c;如Typec扩展、手机/电脑投屏、扩展底座、投影仪等。 CS5363管脚分布情况如下&#xff1a; CS5363是一款高度集成的单芯片&#xff0c;适用于多个mGeneral 支持最高分辨率/定时4k60Hz 支持…

饿了么官方霸王餐API接口该如何对接?

外卖霸王餐API接口是一种为餐饮行业设计的应用程序编程接口&#xff0c;它允许第三方平台或应用程序与外卖平台进行数据交换和功能集成。通过这种接口&#xff0c;商家可以实现自动化管理&#xff0c;提高运营效率&#xff0c;同时为消费者提供更加便捷和个性化的服务体验。 霸…

记录debug分析nacos源码

nacos源码分析 一、环境构建二、源码分析1. 启动类2. 源码的中的案例3.. 服务订阅流程梳理3.1. 从 NamingFactory.createNamingService(properties);说起3.2. 服务订阅总结 4. 服务注册流程梳理4.1. 从 naming.registerInstance("nacos.test.3", "11.11.11.11&q…

【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 创建灵感基本配置头像名称和简介人物设定角色与目标思考路…

一文读懂数据血缘分析原理与建设方法

什么是数据血缘分析?数据血缘为数据全生命周期过程中的数据关系&#xff0c;包括数据特征的变化&#xff0c;即数据的来龙去脉。主要内容包括数据的来源、数据的加工方式、映射关系以及数据的流出和消费。数据血缘分析就是针对数据分析中的血缘关系做分析&#xff0c;主要包含…

第二证券:10倍“妖股”一天暴跌98% 揭秘港股那些做局套路

尽管港股行情全体低迷&#xff0c;自上一年以来港股商场仍不乏短短时日暴升10倍以上的疑似“妖股”&#xff0c;这些公司普遍具有一起的特征&#xff1a;刚上市不久的新股、次新股&#xff0c;市值较小、股权高度会集。 证券时报记者通过查询发现&#xff0c;这类股票反面往往…

图片无损缩放PhotoZoom Pro 9.0.2绿色版 +免费赠送PhotoZoom激活优惠代码

PhotoZoom Pro 9.0.2 是一款专业的图片无损缩放软件&#xff0c;该软件采用了 benvista s-spline 独特技术&#xff0c;增强了对图像格式的支持&#xff0c;多处理器支持&#xff0c;GPU 加速&#xff0c;win10和 Photoshop CC 支持。带来一流的数字图形扩展与缩减技术。该软件…

torch torchvision 安装失败解决方法

按照安装教程在安装Torch torchvision的时候报错 报错内容&#xff1a; ERROR: Could not find a version that satisfies the requirement torch (from versions: none)ERROR: No matching distribution found for torch 出现这个情况&#xff0c;有说要换源什么的&#xff…