静态库与Windows平台导入库
Posted
技术标签:
【中文标题】静态库与Windows平台导入库【英文标题】:static library v.s. import library on Windows platform 【发布时间】:2011-11-05 10:05:57 【问题描述】:我怎么知道一个 .lib 文件是静态库还是静态库? DLL 的导入库?是否有任何工具或命令可以做到这一点?
第二个问题是如何检查静态库的依赖关系,我的意思是我如何知道这个静态库中包含哪些 DLL?
感谢您的帮助。
最好的问候,
【问题讨论】:
该信息将与 .lib 文件一起提供 如果您没有这样的线索,那么您确实不想使用该库。联系代码所有者并询问支持选项。 请注意,静态库和导入库只是频谱中的两个极值。你也可以有一个混合的静态/导入库。 关于您的第二个问题:您的意思是静态库中包含哪些DLL,还是静态库依赖于哪些DLL? 【参考方案1】:导入库将为您的程序添加一个 DLL 依赖项。如果您没有 DLL,您的程序将无法启动。 (您可以使用Dependency Walker 来获取程序所依赖的DLL 的名称)。
Afaik 静态库没有依赖项。它们链接到程序中,只有链接器错误会告诉您该特定库是否依赖于另一个库。 (至少在 GCC 中,我不知道想要的是 MS 工具的行为。)
【讨论】:
对此进行扩展:将静态库与一个普通程序链接,然后使用 Dependency Walker 查找任何新的 DLL 依赖项。 静态库通常至少对基本系统库(ntdll.dll 等)具有 DLL 依赖关系,并且可能还具有对语言运行时的依赖关系,例如 msvcrt.dll。【参考方案2】:仅给定一个wtf.lib
文件,问题是确定这个库文件是static library
还是import library
。我目前的做法是(通过 DOS 提示符和 cygwin bash shell 的组合)。
在需要正确运行dumpbin.exe的DOS提示符下:
dumpbin -all wtf.lib > wtf.lib.txt
然后,在 cygwin shell 中:
grep 'Archive member name' wtf.lib.txt
如果grep
的输出输出一个DLL 文件名,那么wtf.lib
就是import library
。否则,它是一个独立的static library
。
【讨论】:
我必须发誓并承认这里找到了更优秀的答案:***.com/questions/6402586/…以上是关于静态库与Windows平台导入库的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 中将 VS2005 静态库与 gcc 链接