3.C程序编译步骤

news2024/12/24 8:34:09

目录

1  预处理

2  编译

3  汇编

4  链接

5  文件大小情况


依次执行下面4个步骤

  1. 预处理
    • 将所有头文件展开,比如stdio.h等,展开就相当于把stdio.h中的所有代码粘贴到你的代码里。
    • 将所有的宏文件展开,像stdio.h是官方定义的头文件,宏文件可以理解为自定义的头文件
    • 进行条件编译,比如:获取编译环境信息,比如当前是什么系统,系统位数是多少。再比如获取编译成exe的名字
    • 将代码中的注释删掉
    • 在预处理阶段不会检查语法
  2. 编译:
    • 检查语法,检查没问题后将预处理后的文件生成汇编文件
  3. 汇编
    • 将汇编文件生成目标文件(二进制文件)
  4. 链接
    • .h文件也是高级语言,它有一些在上述过程中无法转换为二进制,在这一步会将目标文件与一些必要的库链接起来,最终生成一个二进制文件
    • 如果你用了头文件的函数但并没有导入头文件会在这一步报错而不是编译时报错

我们可以使用gcc进行分步编译

1  预处理

helloworld.c文件是这样的

通过预处理 由.c文件得到.i文件

用记事本打开helloworld.i,首先可以发现头文件被展开了

拉到最下面发现之前的注释消失了

2  编译

由 .i 文件得到 .s文件

用记事本打开helloworld.s发现里面变为了汇编语言,汇编语言中别的不一定认识,这个movl只要接触过汇编语言的应该有所了解

  • 这里的汇编格式是GCC的格式,所以和我们自己写的汇编不是很一样,有的地方会啰嗦些

3  汇编

由 .s 文件得到 .o文件

记事本的默认编码方式应该是utf-8,.o文件是二进制文件,你用记事本打开就乱码了

二进制是人类看不懂的,如果你想打开你可以用python下面的代码打开它 

with open('E:\\笔记\\C语言笔记\\代码\\3.C程序编译步骤\\helloworld.o','rb') as f:
    print(f.read())

4  链接

由.o文件得到exe文件

  • 写不写最后的exe都会给你搞出一个exe来

关于链接的库,实际上就是dll文件,你可以用 dependcy walker.exe 来查看链接库的情况,首先到官网进行下载 Dependency Walker (depends.exe) Home Page

我当前系统是win10,我下载的是这个

下载后得到一个压缩包,压缩包解压后会得到下面三个文件

双击打开exe后,先点击options然后点击Configure Module Search Order。这个是设置从哪里找。我们需要限制寻找的范围,不然depends.exe会未响应

会从右边找库,移动到左边表示不从那里找。比如我现在将PATH移动到左边,就表明不从PATH中找库了

移动完毕之后是这样的

如果你还想添加路径,那就点Browse,然后找到你要添加的路径,之后点击Add Directory

确定后点击OK

之后点击OK关闭窗口,然后把需要看链接的exe拖到Dependency Walker就可以看到链接的情况了

5  文件大小情况

在.i文件中由于把头文件展开了,它里面放的内容多,所以文件比.c文件大了很多。exe最大

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

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

相关文章

C# - Opencv应用(3) 之矩阵Mat使用[图像截取粘贴、ROI操作、位运算、数学计算]

C# - Opencv应用(3) 之矩阵Mat使用[图像截取粘贴、ROI操作、位运算、数学计算] 图像读取,大小、截取、位运算图像ROI操作:粘贴赋值、滤波图像数学计算部分结果如下: 1.图像读取,大小、截取、位运算 //图…

计算机辅助药物设计AIDD-小分子-蛋白质|分子生成|蛋白质配体相互作用预测

文章目录 计算机辅助药物设计AIDD【小分子专题】AIDD概述及药物综合数据库学习机器学习辅助药物设计图神经网络辅助药物设计自然语言处理辅助药物设计药物设计与分子生成 计算机辅助药物设计【蛋白质专题】蛋白质数据结构激酶-Kinase相似性学习基于序列的蛋白质属性预测基于结构…

解决xshell连接诶树莓派中文乱码的问题

系统版本 解决办法 在根目录下找到 /etc/profile 修改profile文件,添加以下两行.以便重启之后也能生效: export LANGzh_CN.utf8 export LC_ALLzh_CN.utf8注意: /etc/profile的修改需要root权限才能修改! 在xshell的编码格式改为UTF-8

一次性客户的笔记总结

创建一次性客户,系统会给出一个客户编码; 每次记账的时候,在录入过账码及客户编码后,点击回车,都需要录入这个客户的详细信息(比如 客户名称等) 一次性客户的信息存储在BSEC表中,这种…

飞致云1panel + 雷池WAF

可能有许多人都有这个需求:为自己的个人站点套上WAF,增加安全性,本文将介绍如何将1panel面板深度结合长亭雷池防火墙,实现为个人站点套上WAF并且自动续签ssl证书。 前提条件: 服务器IP已绑定域名 完整的1panel环境 …

springboot简单集成上传和下载(带页面)

来学习一下文件上传和下载 一、页面开发 整体思路 登录页 主页 二、库表设计 SET FOREIGN_KEY_CHECKS0;-- ---------------------------- -- Table structure for t_files -- ---------------------------- DROP TABLE IF EXISTS t_files; CREATE TABLE t_files (id int(11) N…

【五分钟】熟练使用numpy.cumsum()函数(干货!!!)

引言 numpy.cumsum()函数用于计算输入数组的累积和。当输入是多维数组时,numpy.cumsum()函数可以沿着指定轴计算累积和。 计算一维数组的累计和 代码如下: # 计算一维数组的累计和 tmp_array np.ones((4,), dtypenp.uint8) # [1, 1, 1, 1] print(&…

java--接口概述

1.认识接口 ①java提供了一个关键字interface,用这个关键字我们可以定义出一个特殊的结构:接口。 ②注意:接口不能创建对象;接口是用来被类实现(implements)的,实现接口的类称为实现类。 ③一个类可以实现多个接口(接…

1、Spring基础概念总结

Spring概述: Spring体系结构 IOC的概念和作用 耦合指的是对象之间的依赖关系,耦合越小越好 以jdbc为例 通过反射来注册驱动,那么会造成驱动名称写死在程序当中,这种结果显然是不太合理的通过配置文件的形式可以解决这种耦合问…

微服务--一篇入门kubernets

Kubernetes 1. Kubernetes介绍1.1 应用部署方式演变1.2 kubernetes简介1.3 kubernetes组件1.4 kubernetes概念 2. kubernetes集群环境搭建2.1 前置知识点2.2 kubeadm 部署方式介绍2.3 安装要求2.4 最终目标2.5 准备环境2.6 系统初始化2.6.1 设置系统主机名以及 Host 文件的相互…

成为AI产品经理——模型稳定性评估(PSI)

一、PSI作用 稳定性是指模型性能的稳定程度。 上线前需要进行模型的稳定性评估,是否达到上线标准。 上线后需要进行模型的稳定性的观测,判断模型是否需要迭代。 稳定度指标(population stability index ,PSI)。通过PSI指标,我们可以获得不…

Python类型注解必备利器:typing模块解读指南

更多资料获取 📚 个人网站:ipengtao.com 在Python 3.5版本后引入的typing模块为Python的静态类型注解提供了支持。这个模块在增强代码可读性和维护性方面提供了帮助。本文将深入探讨typing模块,介绍其基本概念、常用类型注解以及使用示例&am…

ssm农业信息管理系统源码和论文

摘 要 网络的广泛应用给生活带来了十分的便利。所以把农业信息管理与现在网络相结合,利用java技术建设农业信息管理系统,实现农业信息管理的信息化。则对于进一步提高农业信息管理发展,丰富农业信息管理经验能起到不少的促进作用。 农业信息…

JVM 运行时内存(三)

Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。 1. 新生代 是用来存放新生的对象。一般占据堆的 1/3 空间。由于频繁创建对象,所以新生代会频繁触发MinorGC 进行垃圾回收。新生代又分为 Eden 区、ServivorFrom、…

分享全球顶尖的AIGC文生图资源

1 引言 人工智能正在改变许多行业的格局,而其中改变最直观和影响最大的就是AIGC领域的图像创作。文生图技术作为AIGC的一个重要分支,展现了人工智能在视觉创作领域的巨大潜力。发展至今已经有很多AI文生图平台,这是一次革命性的突破&#xf…

详解Hotspot的经典7种垃圾收集器原理特点与组合搭配

# 详解Hotspot的经典7种垃圾收集器原理特点与组合搭配 HotSpot共有7种垃圾收集器,3个新生代垃圾收集器,3个老年代垃圾收集器,以及G1,一共构成7种可供选择的垃圾收集器组合。 新生代与老年代垃圾收集器之间形成6种组合&#xff0c…

代码写完直接调试!IDEA插件还能这么用

IDEA是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作,一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件:Api…

Apache Sqoop使用

1. Sqoop介绍 Apache Sqoop 是在 Hadoop 生态体系和 RDBMS 体系之间传送数据的一种工具。 Sqoop 工作机制是将导入或导出命令翻译成 mapreduce 程序来实现。在翻译出的 mapreduce 中主要是对 inputformat 和 outputformat 进行定制。 Hadoop 生态系统包括:HDFS、Hi…

单片机系统

我们来看单片机 的例子,读者可能会担心单片机(又称MCU,或微控制器) 过于专业而无法理解。完全没必要!在这里我们仅借它谈论一下有关时间的话题,顺带提一下单片机系统的概念。 单片机顾名思义是集成到一个芯…

【五分钟】熟练使用numpy的histogram函数(干货!!!)

histogram函数重要参数详解 def histogram(a, bins10, rangeNone, normedNone, weightsNone, densityNone):...位置参数a: The histogram is computed over the flattened array.(源码对参数a的解释) 从源码对参数a的解释来看,参…