静态库:VS工程设置为生成lib
导入库:VS工程设置为生生成DLL,VS生成DLL的同时 生成一个lib,这个就是导入库。只记录函数在DLL的位置没有实现函数
方法一:
VS项目-》属性-》配置属性-》库管理器-》常规-》附加依赖项---> 添加需要合并的静态库lib
--->附加库目录 添加需要合并的静态库lib 所在的路径
方法二:
开始-》所有程序-》Microsoft Visual studio 2010-》visual studio tools-》Visual studio 命令提示符
在出来的Dos窗口中,输入命令:
lib.exe /out:objectlib.lib lib1.lib lib2.lib
该目录下会生成合并后的lib库object.lib
(或lib.exe /out:D:objectlib.lib D:mylib*.lib 将D:mylib目录下的lib合并为objectlib.lib)存在D目录下)
查看lib是导入库还是静态库的方法
lib /list [文件名] 显示dll的是导入库,显示.obj或者.o是静态库
例如:
开始-》所有程序-》Microsoft Visual studio 2010-》visual studio tools-》Visual studio 命令提示符
lib.exe /list C:/a.lib
lib导入库有什么用
通过前面三篇的介绍,静态lib库,就完全讲清楚了。那么这里我们来介绍一下lib导入库。虽然lib导入库不是很重要,但是为了方便使用dll,lib导入库还是很常用。但是没有lib导入库,也是可以使用dll的。所以说,lib导入库是一个附加的增值产品。
dll是用来动态链接的,也就是程序运行时才链接的。静态链接就是在生成exe时就链接到exe里了。链接最终的目的是要将dll载入到和exe同一个进程空间中。尽管这里是动态链接,它只是在链接的时间上延迟罢了。静态链接时,直接在生成时将库的内容放在了exe中,当exe文件加载到内存时,链接的库的内容也加载到内存了。动态链接库dll则是在生成exe的时候只用了一个占位表,叫做重定位表。然后在exe需要的时候,再将dll加载到exe所在的进程的内存空间中。
所以说,不管是静态链接还是动态链接,最终都是要到exe的进程内存空间中的,是跑不了的。躲得了初一躲不了十五,dll只是延迟加载到内存罢了。
我们要使用dll,为了方便知道dll中的所有函数都在什么位置,就用上了lib导入库。这个导入库记录了dll中的所有函数在dll中的位置,那么我们引入了lib导入库之后,在运行的时候,在加载了dll后,就可以方便的定位需要的函数了。有了这个lib导入库,我们不需要手动的去找dll中的函数了。使用dll就和静态lib库或者和直接的源码中写的函数一样简单。
另一种就不用lib导入库了,使用API函数LoadLibrary来加载dll到内存中,然后使用API函数GetProcAddress来找到dll中的函数地址。这里的使用,将在dll的专题中讲解,就不多述了。
本文摘自 :https://blog.51cto.com/l