问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

c++ obj文件与exe文件的区别

发布网友 发布时间:2022-05-06 23:24

我来回答

1个回答

热心网友 时间:2023-01-28 02:05

编译:当前源代码编译成二进制目标文件(.obj文件)

链接(link):将生成的.obj文件与库文件.lib等文件链接,生成可执行文件(.exe文件)。

可以说.obj文件是.exe文件的前身;

1、obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。   

编译器会默认链接一些常用的库,其它的需要你自己指定。

2、目标文件,一般是程序编译后的【二进制文件】,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的【相对地址】,而可执行文件是【绝对地址】。CPP对应的二进制代码格式obj,是未经重定位的!

3、编译C 程序会产生obj 文件和exe 文件,我们都知道exe 文件是可执行文件,但obj 文件是做什么用的呢?

查了下资料发现obj 文件和exe 文件都是二进制数据文件,其中obj 文件是COFF 格式,exe 文件时PE 格式。

那为什么不直接让 obj 文件作为可执行文件呢?

原来obj 文件的格式是跨平台 的,通过link 可以将obj 链接为所使用系统能够识别的格式,比如windows 系统中的exe 文件。

一个现代编译器的主要工作流程如下:
源程序(source code)→ 预处理器(preprocessor)→ 编译器(compiler)→ 汇编程序(assembler)→ 目标程序(object code)→ 连接器(链接器,Linker)→ 可执行程序(executables)

扩展资料

C++编译 (.obj, .lib, .dll, .exe的关系)

一、总体介绍:

c++程序在编译后,在目标路径下会生成多个文件:

Debug文件夹(*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb),*.cpp,*.dsp,*.ncb,*.plg

*.exe:是生成的可执行文件

*.ilk:当选定渐增型编译连接时,连接器自动生成ILK文件,记录连接信息

*.obj:是目标文件,源程序编译后的产物

*.pch:全称是PreCompiled Header,就是预先编译好的头文件

*.idb:文件保存的信息,使编译器在重新编译的时候只重编译最新改动过的函数和只对最新类定义改动过的源文件进行重编译,以提高编译速度

*.pdb:全称是Program DataBase,即程序数据库文件,用来记录调试信息

*.dsp:(全称是Developer Studio Project)也是一个配置文件

*.ncb:(全称No Compile Browser)的缩写,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成

*.plg:实际上是一个超文本文件,可以用Internet Explorer打开,记录了Build的过程

*.cpp:就是C++源代码文件.

二、具体介绍:

lib是和dll对应的。

lib是静态的库文件,dll是动态的库文件。

所谓静态就是link的时候把里面需要的东西抽取出来安排到你的exe文件中,以后运行   你的exe的时候不再需要lib。

所谓动态就是exe运行的时候依赖于dll里面提供的功能,没有这个dll,你的exe无法运行。

lib,   dll,   exe都算是最终的目标文件,是最终产物。而c/c++属于源代码。源代码和最终目标文件中过渡的就是中间代码obj,实际上之所以需要中间代码,是你不可能一次得到目标文件。

比如说一个exe需要很多的cpp文件生成。而编译器一次只能编译一个cpp文件。

这样编译器编译好一个cpp以后会将其编译成obj,当所有必须要的cpp都编译成obj以后,再统一link成所需要exe,应该说缺少任意一个obj都会导致exe的链接失败。

obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。

2.理论上可以,但实际中通常用lib。

3.编译器会默认链接一些常用的库,其它的需要你自己指定。

附上lib和DLL的区别

(1)lib是编译时需要的,dll是运行时需要的。 

如果要完成源代码的编译,有lib就够了。 

如果也使动态连接的程序运行起来,有dll就够了。 

在开发和调试阶段,当然最好都有。 

(2)一般的动态库程序有lib文件和dll文件。

lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。

如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。

但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 

(3)在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件。

引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址。

这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。

从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。

c++ obj文件与exe文件的区别

可以说.obj文件是.exe文件的前身;1、obj里存的是编译后的代码跟数据,并且有名称,所以在连接时会出现未解决的外部符号一说。当连成exe后便不存在名称的概念了,只有地址。lib就是一堆obj的组合。编译器会默认链接一些常用的库,其它的需要你自己指定。2、目标文件,一般是程序编译后的【二进制文件】...

编写c程序后出现一个obj文件和exe文件,他们都是干什么用的阿

.obj是将已将编好的程序编译为汇编语言的文件。.exe就是将所有的.obj文件连接起来得到的可执行文件!

.c;.obj;.exe的联系和区别

.c是源文件,.obj是编译后的目标文件,.exe是目标文件链接后生成的可执行文件

C语言中的obj

obj文件是目标文件,一般是程序编译后的二进制文件,在通过链接器和资源文件链接就成exe文件了。OBJ只给出了程序的相对地址,而EXE是绝对地址。OBJ文件不支持有孔的多边形面。举个例子说明一下:选择Maya的创建多边形工具(Polygons -> Create Polyon Tool),在视图中画一个四边形,不要按回车,按Ctrl...

*.c,*.obj,*.exe,分别是什么程序

C是程序代码百(即源文件)是保存你的C代码的文件,C文件依次编译,并对应。每个OBJ文件都被生成,即问目标文件的答案,是对应C文件的二进制版本,一旦连接,您就有了您的.exe文件,它是您的可执行文件。Obj文件结构:Obj文件不需要任何类型的文件头,尽管用几行文件信息启动文件是很常见的。OBJ文件...

保存c语言程序用什么扩展名,.c与.obj的区别

.c是源程序 .obj是经过编译得到的中间代码 .exe是经过链接得到的最终可执行程序

C语言中的源程序文件和目标文件的扩展名分别是

C语言源代码文件一般扩展名为.c,目标文件扩展名一般为.obj,生成的可执行文件扩展名一般为.exe。不同平台的C源代码扩展名都为.c,但目标文件扩展名不同,例如: 在Linux平台上,生成的可执行文件一般扩展为.out。源文件:这是指由源程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所...

c语言生成的目标文件和汇编语言生成的文件有什么区别

不一样。目标文件中都有编译器自己加入的一些信息。各不相同。并且,同样一条指令,不同的编译器编译出来的结果也不尽相同。比如:同样一句:把ax寄存器置0;即使是汇编,也有 xor ax,ax和sub ax,ax的区别。不一样。

C语言源程序文件、目标文件和可执行文件的扩展名是什么?

C语言源程序文件扩展名: .c 目标文件扩展名: .obj 可执行文件扩展名: .exe 源程序:程序可以用高级语言或汇编语言编写,用高级语言或汇编语言编写的程序称为源程序。C语言源程序的扩展名为“.c”。源程序不能直接在计算机上执行,需要用“编译程序”将源程序编译为二进制形式的代码。目标程序:源...

C语言源程序文件的后缀是什么,经过编译后生成文件的后缀是什么?经过连 ...

C语言源文件后缀名是.c,编译生成的文件后缀名是.obj,连接后可执行文件的后缀名是.exe。源文件的后缀仅仅是为了表明该文件中保存的是某种语言的代码(例如.c文件中保存的是C语言代码),这样程序员更加容易区分,编译器也更加容易识别,它并不会导致该文件的内部格式发生改变。

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
...了3毫升生理盐水,那稀释过后的安定针,1毫升含多少毫克安..._百度知... ...生理盐水 那么0.6克剂量要加入多少毫升生理盐水? ...针管把2毫升安定针抽了出来,又抽了3毫升生理盐水,那稀释过后的安定针... 2ml三分之二 其乐和百丽哪个质量好 执业药师证的作用? 考取执业药师有什么作用和好处 6000瓦热水器用4平方的线,使用时漏电开关冒烟,有焦臭味怎么回事? 我2月29号去飞机场。在网上订了10点45的飞机。我10点到。工作人员说太... 2月29日咸阳至上海的机票铜川到咸阳机场怎么座车? 酒吧最多的城市不是北上广,而是哪呢? Cannot find the definition(implementation) of this function 如何在word中进行简单计算 宁波江北DT酒吧什么时候开夜 支付宝上充话费充值错了跟别人联系别人不愿意给我怎么办? word2012快速计算在哪 我充错话费了,给对方打电话,提示电话怎么处理 请教.dsw,.dsp文件是干什么的? 下载了一个流水灯的相光程序文件,却打不开,里边有project开头,后缀有hex、M51、OPT、plg等 如何实名认证不要银行卡? 如何实名认证不要银行卡? plg 格式插件 破解 什么软件能打开lnp lst M51 OBJ PLG格式文件,这些格式文件时干什么用的?谢谢ing!!! 如何将jpeg格式文件转换成plg格式? 图片不是 PLG格式的怎么办?? 我的文件只能用PLG格式的图片 推荐一款能打印 A3的照片 的打印机,要求照片效果好 ios app开发和android app开发那个比较有前途? 冒险岛25级风灵使者(突然想起的问题囧……) 冒险岛风灵使者怎么加技能点? 风灵三转.上古魔书做完了之后没有后置任务 成都共3136家酒吧相关企业,武侯区最多,这是为什么? 在小县城开家慢摇吧要多少钱? 冒险岛 飞侠1转那里转 梦幻129DT压镖赚钱快还是打图 还是其他? 谁知道《破事儿》里面,陈冠希在酒吧的那个dj音乐叫什么名字啊? 在温州大型的酒吧做服务员一月能赚多少钱啊 小费加工资的 急请大神帮忙翻译一下 matlab语言翻译成vb语言!! 感激不尽!!! 奋斗中米莱在酒吧为陆涛唱歌穿的什么衣服啊 求!!陀*师姐II 第26集,一开始沈桥和JEMAS在酒吧里 裏跳舞叫什么名字 牛肉,白萝卜,香菇,西红柿可以一起炖吗? 提肛运动的危害,哪些人不宜做提肛运动 布洛克鞋子的鞋带系法 谁知道老成都旧时过年的风俗? 游客最喜欢去过年的城市,为什么几乎分布在南方? .游喜神方的时间、地点、讲究? 今年春节期间成都宽窄巷子有些什么活动,那里的消费高吗?外地人来主要看... 6个点是0.06还是0.6? 成都7月份哪里有潮玩? 销售6个点是什么意思 做销售得说按6个点提如果销售了1000那么该提多少钱
  • 焦点

最新推荐

猜你喜欢

热门推荐