静态库和动态库相关概念
来源:互联网 发布:淘宝客活动怎么取消 编辑:程序博客网 时间:2024/05/16 08:42
静态库
动态库
导入库
delay load
rebase
静态库:
以lib库(obj集合)的形式提供代码重用,需要和客户程序一起编译,成为一个二进制程序体。
动态库:
以二进制的dll提供代码重用,无需和客户程序一起编译。客户程序依赖其导出符号表(lib)。
dll和lib(静态库)在代码上的差别,主要是多了__declspec(dllexport)。
模板类不能导出。
静态链接:
1、#pragma comment(lib, "libname.lib").
2、使用additional dependencies添加libname.lib。(同时在Additional Library Directories中设置搜寻位置)。
以上两种方式的libname.lib可以是静态库,也可以是dll的导入库。同时,使用处需要库的头文件。
libname.lib为dll的静态库时,静态库就被引入了,可以编译了。相应被引用的函数和代码都被拷贝到exe中。
libname.lib为dll的导入库时,由于有了符号表和地址,也可以编译了。但函数代码和数据保存在dll中,只在exe被载入时,才把dll加载到内存。
3、是project dependencies设置依赖。相当于加lib。可以加静态库或动态库。
4、直接把lib文件添加到调用者的工程中。(没用过,不确定效果。)
动态链接:
1、LoadLibrary。
DllMain():
这个函数不是必须的。
不提供时,系统给提供一个默认的。(??)
查看dll的导出符合集:
dumpbin.exe /export dllname.dll
查看第三方dll所依赖的dll(特别是RT库的类型):
dumpbin.exe /import thirdparty.dll
dll文件位置:
dll应该放在和exe同目录中,或放在system PATH中。
留意使用的rt库类型:
表6-1 C/C++运行期库
库名描述LibC.lib用于单线程应用程序的静态链接库(当创建新应用程序时,它是默认库)LibCD.lib用于单线程应用程序的静态链接库的调试版LibCMt.lib用于多线程应用程序的静态链接库的发行版LibCMtD.lib用于多线程应用程序的静态链接库的调试版MSVCRt.lib用于动态链接M S V C R t . d l l库的发行版的输入库MSVCRtD.lib用于动态链接M S V C R t D . d l l的调试版的输入库。该库同时支持单线程应用程序和多线程应用程序
- 静态库和动态库相关概念
- 静态链接库和动态链接库概念
- iOS关于静态库和动态库的概念
- Linux下动态库和静态库及相关问题
- 如何理解Linux下的动态库概念,和静态库概念,通俗易懂的解释如下:
- 静态库、共享库、动态库概念?
- 概念——静态库/动态库
- 动态库和静态
- 关于C文件执行的流程和动态库,静态库的概念
- Linux下Gcc生成和使用静态库和动态库及相关问题总结
- 静态库和共享库概念
- 静态库和动态库
- 静态库和动态库
- 动态库和静态库
- 静态库和动态库
- 静态库和动态库
- 静态库和动态库
- 静态库和动态库
- IOS UIView之间常用视图之间切换方式
- ViewPager简单使用
- c#
- 利用REMOVE_CONSTANTS函数,查询共享池中哪些SQL没有绑定变量
- Irrlicht引擎在Linux的安装和使用
- 静态库和动态库相关概念
- Sping3.1和hibernate4.2集成—— No Session found for current thread
- 多重背包 poj 1276 Cash Machine
- 三十二道java程序要经典面试题及答案
- 玩游戏 做科研
- 这是一个标题
- (kruscal12.3.5)POJ 2485 Highways(使用kruscal来计算最小生成树的最大边)
- Golang实现Llog日志
- Myeclipse的汉化