您的位置:首页 > 其它

lib静态库、dll动态库

2016-04-24 12:41 274 查看
静态库

1. 静态库扩展名为.lib,静态链接(即代码会直接编译进可执行文件)。静态库是一个或多个obj文件的打包。

2. 在VC中使用静态库的方法:

方法一:在项目属性中添加附加依赖项。

若库目录不在系统和当前目录,选中工程,单击右键,属性-->VC++目录,在库目录中添加库文件所在路径;

选中工程,单击右键,属性-->链接器-->输入,在"附加依赖项“右边选择编辑,输入要包含的静态库名称。

方法二:在项目中直接添加库文件。

选中工程,单击右键,添加-->现有项,在弹出的对话框中选择想要添加的静态库,点击确认。

方法三:使用pragma预处理指令。如:

[cpp] view
plain copy

#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

/article/6336714.html

关于DllMain()的详细说明,可参考:

/article/11083876.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: