当前位置:网站首页>静态库动态库的使用
静态库动态库的使用
2022-06-26 00:26:00 【_Bruce】
首先介绍一下静态库(静态链接库)、动态库(动态链接库)的概念,首先两者都是代码共享的方式。
静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了。在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件
动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。在vs中新建生成动态库的工程,编译成功后,产生一个.lib文件和一个.dll文件,创建动态库要有
__declspec(dllexport)作为函数的前缀:__declspec(dllexport) void test1();
那么上述静态库和动态库中的lib有什么区别呢?
静态库中的lib:该LIB包含函数代码本身(即包括函数的索引,也包括实现),在编译时直接将代码加入程序当中
动态库中的lib:该LIB包含了函数所在的DLL文件和文件中函数位置的信息(索引),函数实现代码由运行时加载在进程空间中的DLL提供
总之,lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要lib;如果要使动态链接的程序运行起来,只需要dll。
调用动态库:隐式链接
隐式链接 需要.h文件,dll文件,lib文件
(1)将dll放到工程的工作目录
(2)设置项目属性--vc++目录--库目录为lib所在的路径
(3)将lib添加到项目属性--链接器--输入--附加依赖项(或者直接在源代码中加入#pragma comment(lib, “**.lib”))
(4)在源文件中添加.h头文件
然后就像平常一样调用普通函数、类、变量
使用静态库
需要.h文件,lib文件
(1)设置项目属性--vc++目录--库目录为lib所在的路径
(2)将lib添加到项目属性--链接器--输入--附加依赖项(或者直接在源代码中加入#pragma comment(lib, “**.lib”))
(3)在源文件中添加.h头文件
边栏推荐
- Energetic girl wangyujie was invited to be the spokesperson for the global finals of the sixth season perfect children's model
- Command of gun make (4) rule
- Detailed explanation of memory leak check tools
- 求n的乘阶
- JQ user defined attribute value
- readv & writev
- Chemical properties and application of trypsin
- 关于VS scanf出现‘scanf‘: This function or variable may be unsafe. Consider usi问题的解决方法
- 17.11 std::atomic续谈、std::async深入谈
- Mot - clé C facile à comprendre statique
猜你喜欢
清甜女孩李斯霞 受邀担任第六季完美童模全球总决赛小主持人
分布式系统(二)分布式事务的理解
V4L2+QT视频优化策略
图形渲染管线
Wanglaoji pharmaceutical's public welfare activity of "caring for the most lovely people under the scorching sun" was launched in Hangzhou
Dataframe extracts data from a column and converts it into a list
readv & writev
Redis7.0 installation steps
recv & send
Exploring temporary information for dynamic network embedding
随机推荐
CYCA少儿形体礼仪 乐清市培训成果考核圆满落幕
wifi 相关知识详解
Chinese and English instructions of collagen enzyme Worthington
安装了Visual Studio 2013 Redistributable,mysql还是安装失败
LeetCode 41 ~ 50
Exploring temporary information for dynamic network embedding
胶原蛋白酶丨Worthington中英文说明书
物联网亿万级通信一站式解决方案EMQ
The answer skills and examples of practical cases of the second construction company are full of essence
Steps of program compilation precompile compilation assembly connection
GUN make (2) 总述
Redis7.0 installation steps
buffer
如何制定可实现中长期目标?
Several methods of JQ obtaining objects
字节序问题
元气少女王钰洁 受邀担任第六季完美童模全球总决赛代言人
高手常用的电脑快捷键
NDK20b FFmpeg4.2.2 编译和集成
胰蛋白酶的化学性质及应用