vs 动态库与静态库,显式调用,隐式调用

本文详细解释了静态库和动态库的概念、调用方式及其优缺点。对比了静态库和动态库的不同之处,以及动态库隐式调用与显式调用的区别。

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

什么是库:一种二进制的复用,也就是,将函数或方法,变成二进制文件。

库的种类:静态库和动态库

在windows平台下静态库后缀为.lib ,在linux 下后缀名.a。

静态库在被调用时,要将头文件和.lib文件拷贝到你的工程下,静态库工作时,会把整个库到考入你的目标文件中,所以在生成可执行文件后,静态库不存在了,也没关系。在linux下也一样,在linux下,你要将你的源文件和库一起编译。

动态库是在运行是被调用;所以在编译阶段只需要库信息*.lib文件和头文件,就可以进行生成目标文件和链接,但是在执行可执行文件时,如果没有库,将无法执行。所以在执行.exe文件时,必须要有相应的库。

动态库的隐式调用:隐式调用需要,.dll库+lib信息文件+头文件,同时在调用程序中,需要,引用库#pragma comment(lib,"*.lib"); 隐式调用偏简单。

动态库的显示调用:显式调用,可以不用lib信息文件和头文件,只需要库文件,也不需要引用库,

 typedef int(*fc)();
HMODULE hdll=LoadLibrary(TEXT("testdll.dll"));
if (!hdll)
{
cout << "查找失败" << endl;
}
else
{
fc f = (fc)GetProcAddress(hdll, "fntestdll");
if (f == NULL)
{
cout << "查找失败!" << endl;
}
else
cout << f << endl;
}
FreeLibrary(hdll);

需要头文件windows.h,在显式调用时,如果遇到,找不到函数时,可能是,dll库中.pp文件,没有对方法进行extren "C"定义,导致,方法按照c++重载的方式,将函数名更改了,导致你找不到函数。

静态库的调用和动态库的隐式调用基本相同。


静态库和动态库的对比:静态库编译之后可以不用再带着静态库,但是,可执行文件会比较大,浪费空间,动态库在使用必须带着,但是动态库可以被共享调用,节省空间,并且,修改,更容易实现。可以只替换动态库。必要时,要替换头文件。

动态库隐式调用和显式调用的对比:隐式调用简单,但是,一旦,某个库缺失或出错,会导致整个应用程序的不能使用。显示调用稍,麻烦,但是,在某个库缺失时,可以进行判断,不妨碍其他函数的运行,可以实现局部更新升级,有更好的使用性。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值