C++从源文件到可执行文件的过程

C++源文件到可执行文件的过程 阅读详情

C++ 从源文件.cpp到可执行文件.exe经历了什么?

Step 0. Prepossing Phrase (.cpp -.i)

编译器Compiler处理头文件#include, 宏定义#define, 条件编译指令

告诉当前源文件.cpp调用的函数接口存在,但是是否实现与编译器Compiler无关。

具体做法是复制将头文件展开(复制)到当前文件中。

这个Phrase完成后仍然是人类语言。

Step 1. Compilation Phrase (.i - .obj)

编译器compiler将.i文件翻译成机器语言binary language,生成目标文件.obj

无论该文件内部函数功能是否在程序中被调用,每个.cpp文件都会生成一个对应的.obj文件,但是可执行文件.exe只会生成一个。

当然也可以手动选择不编译该文件,Linker优化功能可能会省略那些未被调用的.obj文件.

Step 2. Liking Phrase (.obj - .exe)

简单讲,Linker通过每个文件(包含库文件)之间的关系将多个文件整理起来。

Linker的2个真正功能:

  1. Symbol Resulotion: 找到所有.obj文件当中的‘未识别符号’的定义;
  2. Relocation: 把所有代码段、数据段安排到最终的.exe地址空间中。

注1. 如果函数前标注了static,那么函数只在当前.cpp文件中可见。

注2. 如果函数调用了2个同名函数,会引发Linker Error, 因为Linker无法判断调用的是哪个,但是确实存在。

注3. 如果只存在函数声明,不存在实现,而该函数恰好被调用,会引发Linker Error。


Compiler只和接口(声明)对接,Linker才会寻找是否真的存在。

基于Python+OpenCV中文及符号检测 一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。 阅读详情

相关推荐

西门子RS485自由口通信Modbus RTU 通信协议

部分西门子的RS485模块不能使用西门子自带的Modbus RTU通信指令,需要通过自己拼接、发送、接收和解析报文完成Modbus RTU通信。通过多次尝试完成该功能: #R_TRIG_Instance(CLK := #触发, Q => #触发上升沿); IF #触发上升沿 THEN // 触发后先将读取完成复位 #读写完成 := 0; END_IF; CASE #功能码 OF 1: // 线圈状态读取 ; 2:

qq_20792765的博客 1万+

c++源文件到可执行文件过程

一.四个步骤 对于C/C++编写的程序,从源代码到可执行文件,一般经过下面四个步骤: 1).预处理,产生.ii文件 2).编译,产生汇编文件(.s文件) 3).汇编,产生目标文件(.o或.obj文件) 4).链接,产生可执行文件(.out或.exe文件) 以hello.c为例,这个过程可以用下面的图来表示 二.预处理 预处理主要包含下面的内容: a.对所有的“#define”进行宏展开; b.处理所有的条件编译指令,比如“#if”,“#ifdef”,“#elif”,“#else”,“#endif” c.处

XiaoTong_zZZ的博客 1456

SAP系统中PP模块全配置文档

配置路径IMG>SAP NetWeaver>常规设置>维护日历>工厂日历事务代码SCAL要求传输工厂代码描述日历代码日历描述起始日期星期一星期二星期三星期四星期五星期六星期日有效开始日期有效结束日期1000南微医学工厂MT南微医学工厂日历√√√√√√√201820502.4定义工厂配置路径IMG>生产>物料清单>常规数据>定义BOM状态事务代码OS23要求传输配置路径IMG>生产>主数据>资源>常规数据>标准值>定义参数。

yanzibing99的博客 1894

c++从源文件到可执行文件的步骤详解

编译与链接有四个过程: (1)预处理 (2)编译 (3)汇编 (4)链接 (1)预处理 源文件和头文件被预处理成一个.i文件、(-E表示只进行预处理) g++ -E hello.cpp -o hello.i -E:意味着只执行到预编译,直接输出预编译结果。 预处理过程主要处理那些源文件中的以“#”开始的预编译指令。包括#include,#define, #if,等...

ypshowm的博客 7001

统信UOS下获取root权限的两种姿势:图形化开启开发者模式 vs 命令行直接提权

本文详细解析了统信UOS下获取root权限的两种方法:通过图形界面永久开启开发者模式和使用命令行临时提权。开发者模式适合系统级开发,提供完整root权限但降低安全性;临时提权则更灵活,适合日常管理任务。文章还对比了两种方案的优缺点,帮助用户根据需求选择最佳权限管理策略。

weixin_30266885的博客 519

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 545

一个C++源文件从文本到可执行文件经历的过程

文章目录一、预处理(产生....

weixin_43282440的博客 354

从零开始:使用Mask2Former训练你的专属数据集

本文详细介绍了如何从零开始使用Mask2Former训练自定义数据集。内容涵盖环境搭建、数据准备(将LabelMe格式转换为COCO格式)、数据集注册与模型配置、训练启动与调试,以及最终的模型推理与应用。通过实战步骤和常见问题解决方案,帮助读者掌握使用Mask2Former进行实例分割的核心流程,实现专属模型的训练与部署。

weixin_28678151的博客 460

详解c++的编译过程,如何从源文件到可执行文件到

本节详细介绍c++的编译过程,c++从代码到可执行文件有四个阶段:我们可以使用这一命令进行预处理,预处理后的文件还是文本文件可以打开查看以.i为结尾 这一阶段主要处理以井号#开头的代码,比如, , ,对代码进行一个初步的处理,并且会把所有注释删除,通过#include将头文件的实际内容放入当前文件中,主要有两种格式 或 ,对于尖括号的格式,编译器会在默认的头文件搜索路径(通常是标准库头文件所在的系统目录)中查找指定的头文件。例如像、这样的标准库头文件,通常使用尖括号来引用,对于双引号格式,编译器会优先在当

z3363的博客 2848

3D美术14——max——fbx导入max后直接生成bip人形骨骼插件

最近经常会从unity里反八FBX到max里进行2次修改。 但是非常尴尬的事情就是,就是用max做的fbx,你在反导入回来,BIP骨骼都会变成预制体。这个时候有一个方法补救。那就是在导入的时候调整一下参数。(如下图) 把这里调整成设置为骨骼。就还可以了。 但是,如果你不是用max做的FBX。呵呵,那么你一定很头大,因为完全没有用。 所以,这个时候就要上插件了。 Autofbxtobip v.1.1 这个插件适用于2015及其以上版本。 在这之前我还用过一款叫BIPPY,但是效果相当感人,照着这个图片调整

qq_37576129的博客 1万+

GD32F303调试小记(一)之USART(接收中断、接收空闲中断+DMA、发送DMA)

前言 之前写了GD32F103调试小记(二)之USART(接收中断、接收空闲中断+DMA、发送DMA)一文。这次我们来看看GD32F303的USART是如何配置的,结合这两篇文章,相信大家GD32的USART配置流程会十分熟悉。 DMA 能大大减轻CPU负荷的东西,建议场景合适的情况下,都去用DMA功能。 USART 一种串行通信协议, ...

欢喜6666的博客 3万+

Q24:C++源文件从文本到可执行文件经历的过程

预处理阶段、编译阶段、汇编阶段、链接阶段。

不积跬步无以至千里 1472

基于YOLOv8和时序模型的异常动作检测系统

异常动作检测是计算机视觉领域的重要应用,广泛应用于智能监控、安防系统、老人看护等场景。本项目结合YOLOv8目标检测和LSTM时序模型,实现对打架、摔倒、奔跑等异常动作的实时检测,并提供了完整的Web界面。多技术融合: 结合YOLOv8目标检测和LSTM时序建模实时检测: 支持实时视频流处理和文件分析用户友好: 提供完整的Web界面可扩展性: 模块化设计便于功能扩展高性能: 包含多种优化策略。

YOLO 764

C++源文件从文本到可执行文件经历的过程

对于C++源文件,从文本到可执行文件一般需要四个过程: 预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。 产生.ii文件。 编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件(.s文件). 汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件 (.o或.obj文件) 链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件(.out或.exe文件)。 ...

海盗船长y的博客 1075

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++:一个C/C++源文件从文本变成可执行文件的过程

文章目录一、导语二、预处理三、编译四、汇编五、链接 一、导语 假如有一个main.c 源文件,如何让它从源文件变成可执行文件呢? 其大致经过4个步骤:分别是预处理,编译,汇编,和链接。 1).预处理,产生.ii文件 2).编译,产生汇编文件(.s文件) 3).汇编,产生目标文件(.o或.obj文件) 4).链接,产生可执行文件(.out或.exe文件) 大致过程如图所示: 下面我们详细来说说每一...

Rain的博客 3642

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

C++下源文件变成可执行文件的过程

C/C++下的源文件想要运行,都是经过了汇编等一系列操作,从代码变为了机器语言。假设项目下有源文件a.cpp,其变成可执行文件经历了四个过程: 1. 预编译: (1)将a.cpp中的#include递归 (2)将a.cpp中的#define替换 (3)删除#if和#endif (4)删除注释//和/**/ (5)增加行号和文件标识 (6)保留 #pragma 2. 编译: (1)进行词法分析 (2...

weixin_43823473的博客 953

HoRain云--C/C++语言从源文件到可执行文件的整个过程:

本文详细介绍了C/C++程序的编译过程,主要包括四个关键步骤:预处理(宏展开、条件编译处理、头文件包含)、编译(词法/语法分析生成汇编代码)、汇编(翻译为机器指令)和链接(组合目标文件生成可执行程序)。文中通过具体g++命令示例演示了每个阶段的操作方法(如-E、-S、-c参数),并解释了各步骤的作用原理。文章还提供了作者的技术专栏介绍,涵盖C语言、网络协议、Docker、Linux等多个领域。最后作者以谦虚态度邀请读者指正,并以"Stay Hungry Stay Foolish"作结,鼓

2401_86544677的博客 1038

浅谈C/C++源代码从源文件到可执行文件的过程

汇编阶段是将汇编代码转变为机器可执行的指令,汇编器的汇编过程,相对简单,只是根据汇编指令和机器指令码的对照表直接翻译过程,会变完成后,可以将.s文件转为.o文件。2. 链接分为静态链接和动态链接,静态链接和动态链接的最大区别就是链接的时机不一样,静态链接是在形成可执行文件之前,动态链接是在程序执行时。(2)某个源文件会调用另一个源文件中的某个函数,但是每个源文件都是独立编译的,每个.c的源文件,会形成一个.o的目标文件。(3)处理#include预编译指令,将文件内容替换到它的位置,该过程是递归进行的。

Zhen0831的博客 514

请你来说一下一个C++源文件从文本到可执行文件经历的过程?

预处理阶段:对源代码文件包含关系(头文件)预编译语句(宏定义)进行分析和替换,生成预编译文件 编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件 汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件 链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件 ...

WangY.H 688

一个C++源文件从文本到可执行文件经历的过程?-2020-11

对于C++源文件,从文本到可执行文件一般需要四个过程: 预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。 编译阶段:将经过预处理后的预编译文件转换成特定汇编代码,生成汇编文件 汇编阶段:将编译阶段生成的汇编文件转化成机器码,生成可重定位目标文件 链接阶段:将多个目标文件及所需要的库连接成最终的可执行目标文件 ...

FairLikeSnow的博客 281

c++源文件到可执行文件的过程

1、预处理(preprocessor):对#pragma、#include、#define、#ifdef/#endif、#ifndef/#endif,inline内联函数等进行处理 2、编译(compiler):将源码编译为汇编代码,需要编译器 3、汇编(assembler):将汇编代码汇编为目标代码,需要汇编器 4、链接(linker):将目标代码链接为可执行文件,需要链接器 转载于:ht...

weixin_30635053的博客 121

一个C++源文件从文本到可执行文件经历的过程?

2402_84298973的博客 135

C++源文件从文本到可执行文件经历的过程? 双引号和尖括号的区别

C++源文件从文本到可执行文件经历的过程? 对于C++源文件,从文本到可执行文件一般需要四个过程: 预处理阶段:对源代码文件中文件包含关系(头文件)、预编译语句(宏定义)进行分析和替换,生成预编译文件。 预处理主要包含下面的内容: a.对所有的“#define”进行宏展开; b.处理所有的条件编译指令,比如“#if”,“#ifdef”,“#elif”,“#else”,“#endif” c.处理“#...

qq_41007781的博客 286
上一篇: Static关键字
Ayu阿予
博客等级 码龄5年 456粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ayu阿予

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值