微观的C/C++编译执行过程

2023-11-11

前言

       相信能看到这篇文章的同学,是对C语言很热爱的人。

       最开始学习C语言的时候,我们大多数人都是用集成开发环境,VS、VC、devc++等。

       当我们把C语言源代码写好了之后,在集成开发工具中这里点一下,哪里点一下,代码就跑起来了,这种快乐的感觉的确是对初学者的一种最好的鼓励,可是,你别忘记了,我们要做一个资深的程序员,知其所以然是必不可少的,下面我就带大家了解一下我们编写的C语言源文件(.c)到底是如何一步步变成可执行文件(.exe/.elf) 的

过程

四个过程:

        预处理(-E):展开 .h、宏定义等,形成 .i 文件;

        编译(-S):生成一个汇编代码文件,形成 .s 文件;

        汇编(-c):汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式,形成 .o 文件。

        链接:链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。

        友情提示:注意大小写,要不然你会报错的。

代码演示

.c 源代码

#include<stdio.h>
#include<stdlib.h>

#define STR "Hello World"

int main()
{
    printf(STR);
    return 0;
}

预处理(-E):展开 .h、宏定义等,形成 .i 文件;

gcc -E hello.c -o hello.i

编译(-S):生成一个汇编代码文件,形成 .s 文件;

gcc -S hello.i -o hello.s

汇编(-c):汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式,形成 .o 文件。

gcc -c hello.s -o hello.o

链接:链接过程将多个目标文以及所需的库文件(.so等)链接成最终的可执行文件(executable file)。

gcc hello.o -o hello

          在这一步中可能会报错,如下:

           你重新生成一下 .o 目标文件,改成别的名字就好了。

           根本原因是上一步要用小写的 -c

           最后生成的 .exe 双击执行就可以看到 “Hello World” 了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微观的C/C++编译执行过程 的相关文章

  • 向进度条添加百分比文本 C#

    我有一个方法可以显示进程栏何时正在执行以及何时成功完成 我工作得很好 但我想添加一个百分比 如果完成 则显示 100 如果卡在某个地方 则显示更少 我在网上做了一些研究 但我无法适应我正在寻找的解决方案 这是我的代码 private voi
  • 如何将 protobuf-net 与不可变值类型一起使用?

    假设我有一个像这样的不可变值类型 Serializable DataContract public struct MyValueType ISerializable private readonly int x private readon
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • qdbusxml2cpp 未知类型

    在使用 qdbusxml2cpp 程序将以下 xml 转换为 Qt 类时 我收到此错误 qdbusxml2cpp c ObjectManager a ObjectManager ObjectManager cpp xml object ma
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • DbContext 和 ObjectContext 有什么区别

    From MSDN 表示工作单元和存储库模式的组合 使您能够查询数据库并将更改分组在一起 然后将这些更改作为一个单元写回存储 DbContext在概念上类似于ObjectContext 我虽然DbContext只处理与数据库的连接以及针对数
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 使用 C# 读取 Soap 消息

  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum

随机推荐

  • SpringBoot自动配置-切换内置web服务器

    切换内置web服务器 springboot的web环境中默认使用tomcat作为内置服务器 其实springboot提供了4中内置服务器供我们使用 我们可以方便切换
  • 通讯软件006——分分钟学会Citect通讯配置

    本文介绍如何利用Citect实现上位机与设备之间的通讯 通讯资源请登录网信智汇 以下是典型的Citect通讯原理图 IOServer IO服务器 对应Citect节点 Board 在IO服务器上创建虚拟的通讯板 1个IO服务器可以创建多个通
  • C#多线程(四)——Timer的使用

    1 Timer类的作用是设置一个定时器 定时执行用户指定的
  • typora主题配置:公众号一键排版

    typora是一个非常易用且免费的markdown编辑器 是我最常用的文档编辑器 它支持实时渲染 不用打开两个窗口 源码窗口和预览窗口 真正实现了沉浸式写作 所谓所见即所得 它的界面简洁 操作简单 非常容易上手 这里就不介绍了 本文主要介绍
  • (三)2.自动控制原理 Time domain analysis and correct 二阶系统动能特性

    上面讲完了最简单的一阶系统动态性能指标 下面说说二阶的 1 二阶系统的标准形式 二阶系统的典型结构 由这个图 我们可以轻松算出他的开环传递函数 增益 闭环传递函数和增益 这里不手打了 在写二阶传递函数时 我们一般把它写成首一形 传递函数依然
  • WEB-5-TCP / IP协议

    TCP IP协议 一 应用层 二 传输层 1 UDP 协议 1 协议格式 2 特点 2 TCP 协议 1 协议格式 3 TCP 中的核心机制 1 确认应答机制 2 超时重传机制 3 连接管理机制 4 滑动窗口 5 流量控制 6 拥塞控制 7
  • Source Insight 4.0安装教程(PS:附安装包及卸载重新安装等注意事项)

    目录 一 Source Insight 4 0安装包 二 删除配置文件 初次安装忽略此步骤 1 清除注册表信息 2 删除全局配置信息 三 安装步骤 1 解压 2 安装 3 替换 4 破解 5 安装提示unable to open or cr
  • windows10 中英文切换状态无法显示解决办法

    菜鸟的电脑很早之前就有这个中英文状态无法显示的毛病 菜鸟一只想解决 但是没有去弄 前几天 菜鸟发现下载一个其他输入法 电脑自带的输入法的中英文切换就会自己出来 但是好景不长 这是治标不治本 今天菜鸟电脑又显示不出来中英文切换了 于是上网搜索
  • STM32程序死在HardFault_Handler的分析和解决

    最近开发STM32F070F6P6项目 发现程序老是运行不了 仿真发现 程序总是死在HardFault Handler 程序总是死在第二个初始化函数里面 上网查询资料发现 STM32出现HardFault Handler故障的原因主要有两个
  • 中国的互联网技术有多牛逼?

    中国的电商 网约车 共享单车 外卖等都居于全球第一 物流配送效率全球第一 表面上看起来这些都是互联网技术 在全球居于领先地位 然而古怪的是至今为止中国互联网唯一走向世界的只有Tik Tok 在中国以外的市场 互联网还是由谷歌 亚马逊等美国企
  • Web自动化测试流程:从入门到精通,帮你成为测试专家!

    Web应用程序在今天的软件开发中占据着越来越重要的地位 保证Web应用程序的质量和稳定性是非常必要的 而自动化测试是一种有效的方法 本文将介绍Web自动化测试流程 并提供代码示例 步骤一 选取测试工具 选择适合自己团队的自动化测试工具是很重
  • 如何生成1亿个手机号码?Python来教你。真实的面试题哦。

    案例解析 最近在网上看到一个python的面试题目 如何用Python生成1亿个手机号码 我第一眼看到的时候心想 这个还不简单 直接 random randint 1 999999999999 就完事了 但是马上就发现了这其中的错误 这个是
  • sql注入系列之Sqli-labs(less-8)

    判断注入点 http 192 168 81 210 sqli Less 8 id 1 id等于1的时候正常id等于1 的时候页面有改变 因此可以判断可能存在注入 并且是布尔型盲注 判断注入类型 输入1 and 1 1和1 and 1 2发现
  • MySQL字符串截取:左截取、右截取、按关键字截取

    1 从左开始截取字符串 语法 SELECT LEFT str len str 被截取的字符串 len 截取长度 示例 SELECT LEFT TF 8220210412003 1 10 结果为 TF 8220210 2 从右开始截取字符串
  • python使用matplotlib创建三维图时隐藏坐标轴、网格、背景的方法

    使用下面的代码创建一条空间直线 import numpy as np import matplotlib pyplot as plt 创建一个空白画布 fig plt figure 创建一个子图 ax fig add subplot pro
  • [-] \Navicat-Cracker NavicatCrackerDlg.cpp:463 ->Please Patch first Or Specified RSA private key

    报错信息 Navicat Cracker NavicatCrackerDlg cpp 463 gt hinese Can t Generate Activation Code Keygen HINT Please Patch first O
  • 【Mo 人工智能技术博客】文本挖掘之LDA主题模型

    文本挖掘之LDA主题模型 作者 郑培 引言 主题模型是文本挖掘的重要工具 近年来在工业界和学术界都获得了非常多的关注 在文本挖掘领域 大量的数据都是非结构化的 很难从信息中直接获取相关和期望的信息 一种文本挖掘的方法 主题模型 Topic
  • ReLU,Sigmoid,Tanh,softmax,pipeline【基础知识总结】

    一 ReLU Rectified Linear Activation Function 1 优点 2 缺点 3 补充 1 Leaky ReLUs 2 参数化修正线性单元 PReLU 3 随机纠正线性单元 RReLU 二 Sigmoid 1
  • echarts自适应父级盒子宽度

    这里写自定义目录标题 效果 手动改变窗口大小 echarts实现自动适应父级盒子宽度 1 在vue中安装一个插件element resize detector 这是一个元素调整大小检测器 npm install element resize
  • 微观的C/C++编译执行过程

    前言 相信能看到这篇文章的同学 是对C语言很热爱的人 最开始学习C语言的时候 我们大多数人都是用集成开发环境 VS VC devc 等 当我们把C语言源代码写好了之后 在集成开发工具中这里点一下 哪里点一下 代码就跑起来了 这种快乐的感觉的