c++ windows 蓝牙库_跟我学c++中级篇——Windows下的动态库

本文详细介绍了Windows平台下动态库的区别和复杂性,包括.dll与.lib文件的作用,动态库的创建与应用,以及导出函数和类的方法。同时,讨论了动态库的管理要点,如版本控制和避免DLL Hell。最后,提到了常用的库分析工具,如dumpbin、Depends和逆向工程工具IDAPRO、Ollydbg、Windbg。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1520499acf636f7587101a993c4a83c1.png

一、Windows下的动态库

前面学习了Linux下的库的开发应用过程,现在回过头看看Windows。如果用比较容易明白的话来区别二者的不同的话,应该是“Windows平台的库混杂了微软自己很多的东西,看似简单,但比Linux下的库要复杂很多”。写过跨平台开发的程序都知道,在Windows平台下,动态库也要带着.lib文件,否则在编译链接时就会报错。
其实微软的想法非常简单,正如平时处理工具,把工具分得清楚明白不更好寻找和使用么。想法是很好的,可工具量少啊,如果工具海量并且经常更新换代,细节的管控,反而成为了累赘。这是什么意思呢?就是说在库本身的文件中,包含了大量的和细节相关的数据,比如符号的地址,库的类型等。
实际上在Windows平台上进行库编译时,需要根据不同的二进制文件来进行区分。.dll文件是真正的库文件,也就是和LINUX下的SO一样,是动态链接时的共享对象。那么为什么还要有一个.lib文件呢?原因就在于,微软为了方便链接,一些细节的符号表就在这个文件中,而在LINUX的动态库使用过程中,已经说明了,查找共享资源映射内存,这些符号表是必不可少的,到这里就明白了吧。这也是为什么很多新手上来后,发现动态库和静态都有一个lib文件,但是前者的文件要小很多。微软的意思比较明确,有了这些符号表,就可以在编译期控制一些东西而不是像LINUX,有些符号最终会使用装载器来映射查找。
此外,微软还搞了一些导出符号的规定,而这些规定在X64平台又基本都失效了。比如__stdcall啥的,在X64平台上只有一个fastcall了。其它的小零碎如def文件啥的,看上去应

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值