【WIN32】CMake的学习总结 4——深入动态库

本文介绍了CMake构建动态库时遇到的问题,动态库与静态库的区别,包括静态库编译生成lib文件,动态库编译生成dll、lib和exp文件。动态库在编译和运行时的不同需求,以及动态库的入口函数DllMain和导出函数的概念。文章通过模块定义文件和_declspec(dllexport)两种方式展示了如何导出动态库函数。
摘要由CSDN通过智能技术生成

上回讲述了CMake使用动态库与使用静态库之间并没有太大的区别,并讲述了学习期间碰到的问题:无法正确生成动态库DLL,导致使用动态库的test测试项目无法正确编译;

【 学习时遇到的疑问 】

既然已经include_directories指定头文件的搜索路径,头文件已经声明,使用动态库为毛还要lib中的声明?

声明在头文件是没错的,所以需要include_directories来指定头文件的搜索路径;但是lib也并不包含函数的声明,只是dll中的函数的列表而已,这一点我理解错了!
在此将动态库与静态库之间的区别做一个对比,分析错误的原因:
部分资料来自:http://www.cppfans.org/1394.html

动态库与静态库的对比

静态库lib

编译静态库:生成的是一个lib文件(static lib);

对于静态库lib的调用者:
编译时:链接使用lib文件(这个过程可以理解为:链接并把函数的实现一起打包进执行文件中)。
运行时:则不需要则不需要lib文件;

注:静态库的lib:里面其实就是源文件函数的实现;

动态库dll

动态库编译之后有3个文件:.dll,.lib(dynamic lib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值