首页 > 技术文章 > 【合并lib】windows下多个lib合并的方法|查看lib是导入库还是静态库

bandaoyu 2019-01-23 09:18 原文

静态库: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目录下)

  
原文:https://blog.csdn.net/listener51/article/details/78343070
 

 

查看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的专题中讲解,就不多述了。

原文:http://www.cjjjs.com/article/201510250529375

 

推荐阅读