C++基础之静态链接库and动态链接库

本文介绍了C++中静态链接库和动态链接库的区别,包括内存占用、运行时参与、错误报告和调用方式。静态库在编译时参与,程序包含库内容,节省内存但增加体积;动态库在运行时参与,多个程序可共享,减少内存占用。创建和使用静态库涉及创建静态库项目、添加extern "C"声明,而动态库则涉及DLL项目、导出函数及LoadLibrary等API调用。
摘要由CSDN通过智能技术生成

共同点:

1.都是用.cpp文件写的

2.内容无非是变量或者函数

3.是特殊的.obj文件,生成的都是二进制代码

不同点(占用内存上,参与程序运行时间段,调用方式,报错):

1.静态库文件后缀.lib,动态库文件后缀.dll

2.看看占用内存上的对比,前提:静态库A和动态库B里有相同变量c和相同函数d

有一个程序需要用库里的函数,加载的是静态库,那函数所占内存会计算到这个程序上(需要什么内存会多什么)

同样这个程序要用到库里的函数,加载的是动态库,那函数和变量的内存会计算到这个程序上

这样来说:用静态库要省内存

有三个程序要用到库里的函数,加载的是静态库,那函数所占内存x3

有三个程序要用到库里的函数,加载的是动态库,那函数所占内存x1和变量所占内存x1

这样来说:用动态库要省内存

原理:静态库是在用的时候,用到什么,将什么加载在exe中,生成一遍后,lib可以删除了,库中用的内容已经保存在程序里了

动态库是用的时候,执行跳进动态库,运行过后在跳出去,下一个程序也同样,这样感觉动态库放在了三八线中间,谁都可以用,用完了在放回去,因为它一直存在于三八线那里,所以动态库需要占用的内存是一份,且大小是库里所有内容所占内存大小,程序运行一遍后可不能删除dll

3.静态库在程序编译的时候参与

动态库在程序运行的时候参与

4.报错

静态库用到缺失报错:Link

动态库用到缺失报错:程序启动失败

5.调用方式上不同(下面说的就是你怎么创建个库,怎么用)

我用的是VS2010,静态库的使用:

<1.创建win32项目,下一步选择静态库

<2.新建.h和.cpp(把创建里面的东西都删掉,白白的,不过可以留下条件编译,然后写库里的内容,写的函数或者变量前加个 extern “C”(告诉编译器不要改名字),原因是C不支持多态,不加也可以生成使用)

<3.内容写完后运行生成,找到.cpp所在文件夹,上一层目录中的debug中有了lib文件

<4.将.h和.lib拷到所用项目的目录下

<5.main里加载头文件和加载静态库,使用的时候直接使用

加载静态库#pragma comment(lib,"库名.lib")

动态库的使用(有两种调用,静态调用和动态调用,静态调用有缺陷,这里说的是动态调用,用的句柄)

<1.创建win32项目,下一步DLL

<2.同静态库,在extern "C"后面加__decllspec(dllexport)(定义显示动态接口)

<3.内容写完后运行生成,找到.cpp所在文件夹,上一层目录中的debug中有了dll文件

<4.将.h和.dll拷到所用项目的目录下

<5.main里加载头文件和加载windows.h

HINSTANCE hDll=NULL;  
typedef int(*PSUM)(int a,int b);  
PSUM pSum;  
hDll = LoadLibrary(L"cool2.dll");  //动态库名
pSum = (PSUM)GetProcAddress(hDll,"sum");  
printf("%d\n",pSum(1,2));  
system("pause");  
FreeLibrary(hDll); 

//这些代码的解释是创建句柄最后释放,详解可以网上搜着,我学到的理论,怎么用也是网上找到实验可行记下来

(PanPen原创 如有建议 请留言)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值