为编程爱好者分享易语言教程源码的资源网
好用的代理IP,游戏必备 ____广告位招租____ 服务器99/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器
好用的代理IP,游戏必备 ____广告位招租____ 服务器低至38/年 ____广告位招租____ ____广告位招租____ 挂机,建站服务器

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

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

三叶资源网 2022-11-02 19:18:50 其它综合 272 ℃ 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
鱼刺线程池SmartQQQQ群发插件源码支持库模版读写锁中间件易语言聊天室源码十六进制实时监控jar解包检测代理IPLayUI框架进度复制文件GDI+POST教程Etorch文件系统对象觅风易语言教程TTP-244条形码多线程
最新评论