为编程爱好者分享易语言教程源码的资源网

网站首页 > 网络编程 > 其它综合 正文

.obj, .lib, .dll, .exe之间的相互关系

三叶资源网 2022-11-02 19:18:50 其它综合 512 ℃ 0 评论

一、.obj

每一个.cpp文件在编译时都会生成对应的.obj。.obj文件内部是相对地址。

二、.lib

分二类:静态链接库.lib 和 动态链接库dll的导入库.lib。

静态链接库.lib是.obj文件的集合,就是多个.obj文件的打包。.lib不会对.obj文件进行链接。生成静态链接.lib时,编译器不会进行链接操作。

动态链接库dll的导入库.lib是对应dll文件中导出函数的地址表,这些函数的具体实现依然放在.dll中。

因为静态库.lib生成时不会发生链接操作,只是打包.lib文件,所以即使A-lib使用了B-lib,在生成A-lib时,A-lib中也只含有A程序中的所有cpp文件生成的.obj,不会有B程序中的.obj。

这个时候使用A-lib的程序就需要将A-lib和B-lib同时加到自己的lib依赖中,这样才能保证程序链接成功。

三、.dll

.dll是可执行格式的文件,它是将多个.obj文件进行链接后生成的可执行文件。

.dll支持二种链接方式:隐式链接和显式链接。

使用隐式链接时,使用.dll的程序需要将与该dll对应的导入库.lib链接到项目中。这样,在程序执行时,就知道从哪个dll的哪个地方加载函数。

使用显式链接时,不需要导入.lib,但要自己通过编程接口LoadLibrary和GetProcAddress等来告诉使用.dll的程序需要加载哪个dll的哪个函数。

隐式链接只适用于自己的项目,因为dll的代码修改后,相应的导入lib也改变,这个时候需要重新链接使用该dll的程序,这样才能保证使用dll的程序根据导入库.lib中给定的函数地址找到其在dll中的代码。

显式链接适用于第三方库。即使自己的dll代码发生了修改,只要相应的接口没有改变,那么使用该dll库的程序都不需要修改。

四、.exe

.exe是可执行格式的文件。

小结:

1,使用静态lib的程序在链接时,要求其使用到的所有静态lib都能找到,包括该程序使用的静态lib引用的静态lib;

2,使用dll的程序在运行时,要求其使用到的所有dll都能找到,包括该程序使用的dll引用的dll。

来源:三叶资源网,欢迎分享,公众号:iisanye,(三叶资源网⑤群:21414575

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

百度站内搜索
关注微信公众号
三叶资源网⑤群:三叶资源网⑤群

网站分类
随机tag
易语言对接猫池源码会员系统Bilibili评论抽奖图像二值化文件搜索黑月界面类3.8命令行卸载node按键精灵D3D9劫持hook源码快手自动发布图文文字游戏源码多线程传文本型参数空格装修预算计算器HTTP接口调试工具画图形按钮通用型golang汇编中文指令微信Hook
最新评论