静态库动态库链接分析
动态库:lib dll 头文件
从组成上看,动态库和静态库的差异在于动态库多了一份dll文件,导致动态库可以独立存在,
2、链接方式
静态库:只能静态链接
动态库:动态链接和静态链接
3、运行效果
静态库:相当于直接把代码段写入到exe或dll文件中
动态库:相当于与exe或dll形成了一种关系,exe或dll可以到动态库中去查找所需要的函数
4、差别:
静态库:不需要导出就可以被链接使用
动态库:需要导出后方可使用(动态链接)
5、编译
静态库:编译后只有lib文件
动态库:若没有导出函数刚只能编译出dll文件而没有lib因此无法静态链接
6、导出类的链接
静态库:不需要导出,可以直接链接
动态库:必需要导出才可以链接,必须将类中所有函数导出才可以使用(对于public)
对于(protected)无论导出或者不导出均无法直接使用
对于(private)无论导出或者不导出均无法直接使用
7、导出子类
静态库:不需要导出,直接使用文件头就可以使用
动态库:必须导出子类,
若仅使用到子类函数,可以不用导出父类。
若需要使用到父类中继承的函数时,需要将父类中相应的函数导出,否则无法使用
私有函数成员无法在外部使用
若类不导出,只导出成员函数,同样可以正常使用,
小结,对于需要导出类时,建议使用静态库的方式,这样代码可以直接使用。
8、对于编译链接
静态库和动态库相同,若库中引用了很多外部库,且放在预编译头文件中,那么,在链接时可能无法找到某些库,此时需要在专用的导入库中增加,否则将链接失败,
例如:在stdafx.h中加入了#include vector using std::vector;
在链接时将无法使用,因此需要增加专用的头文件,以便可以正常链接。
9、存在这样一种情况,在动态库中,若使用def文件将类导出,在引用时还需要增加__declspec(dllimport)吗?
VS下生成与配置静态库与动态库(一) 此处仅以VS2010为例,详细说明一下如何在VS环境下生成和使用C++的静态库与动态库。Qt下生成和使用静态和动态库后续再讲。 首先简单地理解一下静态库与动态库,以及两者的区别。 静态库(.lib): 将.cpp文件中的函数的地址和定义,以及函数之间的链接关系通通打包,生成的一个二进制文件; 动态库(.lib+.dll): 动态库的.lib文件,打包的只是.cpp文件中函数的地址和链接,函数的具体定义打包在*.dll文件中。
相关文章
- Rust:链接 Windows 下的 MSVC *.lib 静态库
- 【VS开发】【数据库开发】windows下libevent x64库静态编译
- 配置使用OpenCV静态链接库
- 编写TA链接静态库的方法
- java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)
- 南京大学 静态软件分析(static program analyzes)-- introduction 学习笔记
- ShellExecute用法 以及静态文本超链接
- cmake 添加头文件目录,链接动态、静态库
- gcc同时使用动态和静态链接
- VC运行库版本不同导致链接.LIB静态库时发生重复定义问题的一个案例分析和总结
- 静态链接和动态链接库混用导致的链接错误LINK2005
- React & Redux in TypeScript - 静态类型指南
- 在Apache服务器上启用GZip压缩静态内容的方法
- 【集合我能讲两小时056】在arraylist中,为什么有2个静态final修饰的object数组?
- Linux编译多个不同目录下的文件以及静态库、动态库的使用