【C++】静态库动态库

也叫做静态链接库和动态链接库。

库:写好功能的函数。都是exe文件。

程序安装完之后,会出现.dll和.lib文件。

程序运行中,可能需要调用的库。

将一个程序编译成可执行程序的步骤:预处理、编译、汇编、链接、可执行文件

库是写好的,例如cout、createthread等库函数。仅调用即可。

理解:库就是可执行的二进制文件。

静态库:.a/.lib

动态库:.so/.dll

分别是Linux和windows下的后缀。

区别

区别在于,在链接阶段,如何处理链接成可执行程序。

静态库:

  1. 编译时期完成的链接
  2. 程序运行过程中,与库无关系,移植方便(优点)
  3. 浪费空间和资源,更新复杂(缺点)

动态库每次执行都要链接

静态库只链接一次,嵌入exe中,将目标文件压缩到一起,对其编号和索引进程

先生成exe,而后是lib。无数个.o合体成为新的。o就是汇编文件。

静态链接库

把所有的.o文件合成lib

若静态库更新,则需重新生成一个exe,更新复杂。

静态库特点:

1、空间浪费

2、更新复杂,需要重新下载

静态库对程序的更新、部署和发布页会带来麻烦

如果今天静态库更新了,所有使用它的应用程序都需要重新编译,再发给用户。

为了解决此缺点,提出了动态库

动态链接库

仅此一份,程序执行时才会链接这个库,动态库更新,仅更新dll即可放回之前的位置。

静态库步骤

//静态库头文件mylib.h
#pragma once
#include<iostream>
using namespace std;
int add(int a, int b);
int sub(int a, int b);

//静态库cpp文件mylib.cpp
#include"mylib.h"
int add(int a, int b) {
	return a + b;
}
int sub(int a, int b) {
	return a - b;
}

将mylib.h和上一级Debug里的mylib.lib文件提取出来,放入新的lib目录中,与主函数cpp文件同目录下。

//主函数
#include"./lib/mylib.h"
#pragma comment(lib,"./lib/mylib.lib")
int main() {
	cout << add(2, 3) << endl;
	cout << sub(6, 5) << endl;
	system("pause");
	return 0;
}

动态库步骤

//动态库头文件mydll.h
#pragma once
#include<iostream>
using namespace std;
_declspec(dllexport) int mlt(int a, int b);

//动态库cpp文件mydll.cpp
#include"mydll.h"
int mlt(int a, int b) {
	return a * b;
}

将mydll.h和Debug下的lib和dll文件拿走,h和lib放入cpp目录中的dll目录,而dll必须放入exe相同的目录下。

#include"./dll/mydll.h"
#pragma comment(lib,"./dll/mydll.lib")
int main() {
	cout << mlt(3, 5) << endl;
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值