Windows下的静态库和动态库

本文介绍了静态库和动态库的基本概念及生成方法,并详细解释了如何使用这两种库。此外,还对比了它们之间的区别,帮助读者理解在不同场景下如何选择合适的链接方式。

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

“......缺少xxx.dll.....”,想必大家都碰见过这样的错误,但是很抱歉,在这里并不会讲具体怎么解决这个错误,只是借这个错误引出“动态库”(这个xxx.dll就是一个动态库),借“动态库”引出静态库的概念。

在使用C/C++编程的时候,我们通常使用*.h和*.cpp的方式来书写我们的代码,可这存在一个问题:当我们需要将写好的功能分享给别人时候的时候,如果同时把*.h和*.cpp交给别人势必会造成我们的代码泄漏。

静态库动态库很好地解决了这个问题,即:可以将写好的功能分享给他人,又可以将关键部分代码隐藏。

 

静态库

生成静态库:

1.创建Win32项目。

2.选择“静态库”项目,取消勾选“预编译头”。

3.修改项目属性。

 

4.选择“MTd”。

5.写代码。

6.按F7编译,编译通过后,去相应的文件夹下找到对应的“*.h”和“*.lib”文件,本实例是:“MyMath.h”和“StaticLib.lib”。将这两个文件交给别人来使用就可以了。

使用静态库:

新建一个项目,将“MyMath.h”和“StaticLib.lib”复制到项目文件夹中。

如图:

 ---------------------------------------

动态库

生成动态库:

1.创建Win32项目。

2.选择“DLL”项目。

 

3.修改项目属性。

 

4.不使用预编译头。

5.选择“MTd”。

6.写代码。相比静态库,动态库需要写的代码要多出一部分,即:使用__declspec(dllexport)__declspec(imexport)声明动态库的导入导出。通常由作者在头文件中使用条件编译并提供该头文件,使用者直接包含该头文件即可。

说明:如果动态库需要兼容C语言,请加上externC声明,这将使用C风格编译。

例:extern “C” class DLL MyMath{...}

如图:

7.按F7编译,编译通过后,去相应的文件夹下找到对应的“*.h”、“*.lib”和“*.dll”文件(比静态库多出“*.dll”文件),本实例是:“MyMath.h”、“DynamicLib.lib”和“DynamicLib.dll”。将这三个文件交给别人来使用就可以了。

使用动态库:

新建一个项目,将“MyMath.h”、“DynamicLib.lib”和“DynamicLib.dll”复制到项目文件夹中。

有话说:

1.“动态库”通常是在Windows下的说法,Linux下通常有另外一个名称“共享库”。

2.静态库、动态库不仅可以作用于类,也可以作用于函数。本质上应该是“”作用于函数,作用于类时,实际上是作用于类的成员函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值