C++编译和链接过程的详解

2022-2028年中国美容仪行业发展战略规划及投资机会预测报告 报告类型:产业研究 报告格式:电子版、纸介版 出品单位:智研咨询-产业信息网 美容仪是一种根据人体生理机能进行调节改善身体面部的机器,它按照功能来说有美白、嫩肤、祛斑、祛皱、脱毛、减肥等多种,按照名称来说有超声波导入、光子嫩肤、高周波电疗、RF 电波拉皮、电子祛斑点痣、E 光永久脱毛嫩肤、贾法尼营养导入导出等。 智研咨询发布的《2022-2028年中国美容仪行业发展战略规划及投资机会预测报告》共十七章。首先介绍了中国美容仪行业市场发展环境、美容仪整体运行态势等,接着分析了中... 阅读详情

1.基本概念

1.编译:编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换成OBJ文件。
2.编译单元:根据C++标准,每一个CPP文件就是一个编译单元。每个编译单元之间是相互独立并且互相不可知。
3.目标文件:由编译所生成的文件,以机器码的形式包含了编译单元里所有的代码和数据,还有一些期他信息,如未解决符号表,导出符号表和地址重定向表等。目标文件是以二进制的形式存在的。

根据C++标准,一个编译单元(Translation Unit)是指一个.cpp文件以及这所include的所有.h文件,.h文件里面的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件,后者拥有PE(Portable Executable,即Windows可执行文件)文件格式,并且本身包含的就是二进制代码,但是不一定能执行,因为并不能保证其中一定有main函数。当编译器将一个工程里的所有.cpp文件以分离的方式编译完毕后,再由链接器进行链接成为一个.exe或.dll文件。

2.编译

我们跳过语法分析,直接来到目标文件的生成,假设我们有一个A.cpp文件,如下定义:

int n = 1;
void FunA()
{
    ++n;
}

它编译出来的目标文件A.obj就会有一个区域(或者说是段),包含以上的数据和函数,其中就有n、FunA,以文件偏移量形式给出可能就是下面这种情况:
偏移量 内容 长度
0x0000 n 4
0x0004 FunA ??
注意:这只是说明,与实际目标文件的布局可能不一样,??表示长

编译链接 选项解释:link incrementally的作用 这两天研究了一下DLL的import/export原理,看了一些资料,无意中发现网上有一篇文章存在错误,而这篇文章流传还甚广,恐怕也误了不少子弟,觉得有必要说一下:)随便用哪个搜索引擎来搜索“C++ 虚函数 ILT”,排在前面的都有“C++虚函数调用的反汇编解析”一文,此文被转来转去,都不知道最初出处是哪里了。原文作者亲自动手研究了一下VC产生的汇编代码,钻研精神可嘉,不过对一些概念理解有错误 阅读详情

相关推荐

【AI智能体】Claude Code 核心记忆文件 CLAUDE.md实战操作详解

Claude Code 核心记忆文件 CLAUDE.md实战操作详解

congge 5396

(转)C++编译器与链接器工作原理

这里并没不是讨论大学课程中所学的《编译原理》,只是写一些我自己对C++编译器及链接器的工作原理的理解看法吧,以我的水平,还达不到讲解编译原理(这个很复杂,大学时几乎没学明白)。 要明白的几个概念: 1、编译编译器对源文件进行编译,就是把源文件中的文本形式存在的源代码翻译成机器语言形式的目标文件的过程,在这个过程中,编译器会进行一系列的语法检查。如果编译通过,就会把对应的CPP转换...

anhuang5101的博客 451

二年级下册3位数加减法竖式计算练习题.pdf

二年级下册3位数加减法竖式计算练习题.pdf

C++编译器、链接器工作原理

https://www.cnblogs.com/kuliuheng/p/11660104.html 目录 1 几个基本概念 2 一个例子 3 链接器工作顺序 返回目录 1 几个基本概念 编译编译器对源文件的编译过程,就是将源文件中的文本形式代码翻译为机器语言形式的目标文件的过程,此过程中会有一系列语法检查、指令优化等,生成目标(OBJ)文件。 编译单元:每一个CPP文件就是一个编译单元,每个单元之间是互相独立且不可知的。 目标文件:编译步骤产生的文件,包含了编译单元内所有代码数据,以

NEAL002的博客 639

描述C,C++编译链接过程

为什么80%的码农都不了架构师?>>> ...

weixin_33920401的博客 533

C++编译链接

Kiryee的博客 961

C++编译链接过程详解

<br />1、 编译链接器<br />        C++调用gcc编译命令进行编译(不同编译器有所不同),调用link命令进行链接。例如:<br />              gcc 1.cpp -o 1.o<br />             gcc 2.cpp -o 2.o<br />             gcc 3.cpp -o 3.o<br />       生成三个文件1.o,2.o以及3.o。然后调用link命令:<br />       link 1.o 2.o 3.o -o

tomtestingresearch的专栏 1989

C/C++编译链接过程详解 (重定向表,导出符号表,未解决符号表)

详解link  有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后, 或许会有一些答案。      首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visu

1万+

translation unit cpp文件

C++中,是两个紧密相关但处于不同层面的核心概念。简单来说,.cpp文件是你在硬盘上看到的物理源文件,而翻译单元则是编译器眼中处理的基本逻辑单位。#include.cpp.cpp下面我们来详细解析一下。

FantasticOrange的博客 1444

C++100问】C/C++程序执行过程详解之预处理、编译、汇编、链接执行,以及g++/gcc的安装使用

专栏C++学习笔记 ???? 声明: 1)本文仅供学术交流,非商用。 2)博主才疏学浅,文中如有不当之处,请各位指出,共同进步,谢谢。 3)此属于第一版本,若有错误,还需继续修正与增删。还望大家多多指点。 4)大家都共享一点点,一起为祖国科研的推进添砖加瓦。 文章目录专栏C++学习笔记???? 声明:???? 学习路线〇、✏ 前言一、✏ 正文1、✏ 预处理2、✏ 汇编3、✏ 编译4、✏ 链接5、✏ 执行二、✏ 安装...

种树最好的时间是10年前,其次是现在!!! 3219

详解C++代码从源代码到可执行文件的整个编译过程(预处理、编译、汇编链接

C++代码从源代码到可执行文件的生成过程,通常包括以下四个阶段:预处理、编译、汇编链接。每个阶段都有特定的任务目标。

不会编程的码农研究僧 2483

VC项目调试基础

一.Debug版本Release版本的区别 Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小运行速度上都是最优的,以便用户很好地使用。 只有Debug版本的程序才能设置断点、单步执行、使用TRACE/ASSERT等调试输出语句。Release版本不包含任何调试信息,所以体积小、运行速度快

曾梦想仗剑走天涯 8820

【genius_platform软件平台开发】第九十二讲:vs开发环境中sln、vcxproj、vcxproj.filters、sdf、ilk、pdb、pch、pbd等文件含义

(SQL Server Compact Edition Database File)文件,是工程的信息保存成了数据库文件,如果你没有参加大型的团队项目,不涉及到高深的调试过程,这个文件对于你来说没什么用了,可以放心的删除,如果你后来又需要这个文件了,简单,打开工程里的.sln文件重新编译链接就ok了;C++工程编译后会生成多个文件,例如ilk,pch,pbd,obj,idb,pdb,lib,dll,exe这些都是文件的扩展名。类似于DLL的文件。是连接过程中生成的一种中间文件,只供LINK工具使用;

随意的风的专栏 1417

VS项目各种文件说明

一、sln文件 .sln(Solution)解决方案文件,表示一个项目组,他通常包含一个项目中所有的工程文件信息。 二、suo文件 suo(Solution User Options)解决方案用户选项文件,记录所有与解决方案建立关联的选项,以便在每次打开时,它都包含用户所的自定义设置。.suo文件偶尔会被破坏,从而在构建编辑应用程序时出现意想不到的结果。如果Visual Studio对于每个解决方案不稳定,就应删除.suo文件。下次打开解决方案时,Visual Studio会重建它。实际上在使用TF

qq_43128070的博客 4054

动态库生成的*.pdb *.ilk *.exp作用

PDB文件包含调试信息,并且在任何时候需要逐步浏览DLL代码时都很有用。 ILK文件被连接器使用,如果你不重新编译DLL,肯定不需要ILK文件,并且如果你不是必需的,它会变得有用。 EXP文件包含有关从DLL导出的东西的信息 转载于:http://cn.voidcc.com/question/p-abzcerfs-wv.html ...

qq_36333986的博客 2560

vs2019 - 去掉工程输出生成.ilk, .idb的方法

默认建立的VS工程的debug版,会生成.idb文件。不想要这种文件的输出,主要是看着难受.

博客标题不能为空 1134

vc c语言标准库头文件,VC++ 6.0中添加库文件头文件

附加头文件包含VC6.0中:VC6.0默认include包含路径:Tools>Options>Directories>Include files。对于特定项目的头文件包含,在“Project Setting>C/C++ (Category:Preprocessor)>Additional include directories”处添加附加头文件目录,相对目录参考*.d...

weixin_39782394的博客 3657
上一篇: C++内置类型在计算机内存中如何存储的
下一篇: 关于C++函数调用的那些事儿
码出我人生
博客等级 码龄15年 7粉丝 3原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值