静态库、动态库及导入库
静态库
1. 静态库扩展名为.lib,静态链接(即代码会直接编译进可执行文件)。静态库是一个或多个obj文件的打包。
2. 在VC中使用静态库的方法:
方法一:在项目属性中添加附加依赖项。
若库目录不在系统和当前目录,选中工程,单击右键,属性-->VC++目录,在库目录中添加库文件所在路径;
选中工程,单击右键,属性-->链接器-->输入,在"附加依赖项“右边选择编辑,输入要包含的静态库名称。
方法二:在项目中直接添加库文件。
选中工程,单击右键,添加-->现有项,在弹出的对话框中选择想要添加的静态库,点击确认。
方法三:使用pragma预处理指令。如:
#pragma comment(lib, ".../lib/test.lib")
利用上述方法导入静态库后,就可在源码文件中包括.h文件,然后在源码文件中使用静态库函数。
3. 在VC中生成静态库:
选中工程,单击右键,属性-->常规,在"目标文件扩展名"后输入.lib,在"配置类型"中选择"静态库(.lib)"
动态库和导入库
1. 和静态库不同,动态库不会编译进可执行文件中,多个程序引用动态库时,内存中实际只会有一份动态库的内容。
用VC创建动态库时,实际生成两个文件,一个lib文件和一个dll文件,这个lib文件就是导入库。
导入库是动态库的辅助库,导入库中不含代码,而是为链接程序提供信息,包含在.exe文件中建立动态链接时要用到的重定位表。
导入库用于程序开发时,动态库用于程序运行时。
2. 在项目中使用动态库的方法:
方法一: 隐式加载: 这种方式和静态库的使用方法一样,对应有3种具体的方法,注意此时要包含的是导入库而不是动态库,依然需要头文件,代码中可直接使用头文件中的函数名,并且这种方式在运行时需要需要动态库。
方法二: 显式加载(又称运行时动态链接):在代码中使用LoadLibrary()显式打开dll文件,使用GetProcAddress获取函数地址然后使用,使用完之后用FreeLibrary显式释放dll文件。这种方式不需要导入库及.h文件。
使用隐式加载时,如果进程在启动时未找到dll,则操作系统将终止此进程。但使用显式加载时则进程不会被终止。
3. 在VC中生成动态库和导入库:
选中工程,单击右键,属性-->常规,在"目标文件扩展名"后输入.dll,在"配置类型"中选择"动态库(.dll)"
注意: 对于要导出给外部程序使用的函数及数据,均应具有_declspec(dllexport)。如果dll源码中没有一个_declspec(dllexport),则不会生成导入库。
4. DllMain函数:
DllMain函数为dll的入口函数,该函数不是必须的。该函数在dll被加载进程地址空间时运行(即隐式加载时,在main()函数执行之前就已经运行;显式加载时,在LoadLibrary时运行)。
参考资料:
http://blog.chinaunix.net/uid-24517893-id-2495060.html
http://www.cnblogs.com/qinfengxiaoyue/archive/2012/05/27/2519703.html
关于DllMain()的详细说明,可参考:
http://blog.csdn.net/kroosafe/article/details/3454840
静态库、动态库及导入库相关推荐
- 软件库Library之静态库\动态库和静态加载\动态加载
软件库Library之静态库\动态库和静态加载\动态加载 动态库之导入库 https://blog.csdn.net/wallaceli1981/article/details/5740718 * 动 ...
- Linux-(C/C++)生成并使用静态库/动态库
静态库/动态库概要 在Windows下静态库的后缀为:.lib.动态库后缀为:.dll:而在Linux下静态库的后缀为:.a.动态库的后缀为:.so. 那么什么是静态库呢? 首先我们来看看程序编译的大 ...
- C/C++ 跨平台交叉编译、静态库/动态库编译、MinGW、Cygwin、CodeBlocks使用原理及链接参数选项
0. 引言 UNIX是一个注册商标,是要满足一大堆条件并且支付可观费用才能够被授权使用的一个操作系统.linux是unix的克隆版本,是由其创始人Linus和诸多世界知名的黑客手工打造的一个操作系统. ...
- NDK01-打包静态库 动态库在mk和cmake环境配置使用
动态库和静态库 动态库: libxxx.so 运行的时候,才会去加载,加载一次就在内存中存在副本,其他地方使用就都是公用的.使用场景就是 高德百度sdk对外开房 静态库: libxxx.a 编译期把静 ...
- Linux学习---静态库 动态库
今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情. 在Linux操作系统中,普遍使用E ...
- 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )
文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...
- 【Android NDK 开发】Visual Studio 2019 使用 CMake 开发 JNI 动态库 ( 动态库编译配置 | JNI 头文件导入 | JNI 方法命名规范 )
文章目录 I . JNI 与 NDK 区别 II . Visual Studio 编译动态库 III. 配置 导入 jni.h 头文件 IV . IntelliJ IDEA Community Edi ...
- Linux 静态库 动态库
转自:http://blog.chinaunix.net/uid-26833883-id-3219335.html 一.什么是库 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. ...
- Ubuntu下CodeBlocks的安装、配置及静态库动态库的简单使用举例
1. 从Ubuntu Software Center中搜索Code::Blocks并安装: 2. 在第一次启动时选择GNU GCC Compiler作为默认的编译器: 3. 生成静态库并调用操作 ...
- Ubuntu下makefile及gcc生成静态库动态库的简单使用举例
环境:Ubuntu-13.10 32位(虚拟机).gcc4.8.1 首先创建一个test_makefile_gcc文件夹,此test_makefile_gcc文件夹下包括:src文件夹用于存放源文件 ...
最新文章
- 计算机机房建设监理,机房工程建设监理工作要点讲解
- IKAnalyzer使用停用词词典进行分词
- 计算机专业知识考试 一,计算机专业知识试题(事业单位计算机专业知识考试试卷)(1)...
- 下载股票代码的历史数据并打包成csv
- angluar bulid 的时候报错
- Maven下载+Maven环境变量配置+IntelliJ IDEA配置Maven(详细教程) ,收藏起来吧
- .NET实现之(自动更新)
- 与JBoss BPM Travel Agency更新了现代BPM数据集成
- excel判断单元格包含指定内容的函数用=IF(COUNTIF(A1,*内容*),0,1)
- ABB RobotStudio6.08安装
- 【小白冲冲冲!!!】补1: 说一下最大化后验概率
- 基于visual Studio2013解决C语言竞赛题之1033数字交换
- springsecurity安全登录框架
- 【数字信号】基于matlab DTMF电话拨号音识别【含Matlab源码 218期】
- Preference Learning——Object Ranking
- AUTOCAD——圆弧命令
- Apache 配置ssl证书
- python判断word页码
- 2020-10-14Go语言数据类型和变量常量
- Windows安装Dolby Vision 杜比视界插件