【问题标题】:static library v.s. import library on Windows platform静态库与Windows平台导入库
【发布时间】:2011-11-05 10:05:57
【问题描述】:

我怎么知道一个 .lib 文件是静态库还是静态库? DLL 的导入库?是否有任何工具或命令可以做到这一点?

第二个问题是如何检查静态库的依赖关系,我的意思是我如何知道这个静态库中包含哪些 DLL?

感谢您的帮助。

最好的问候,

【问题讨论】:

  • 该信息将与 .lib 文件一起提供
  • 如果您没有这样的线索,那么您确实想使用该库。联系代码所有者并询问支持选项。
  • 请注意,静态库和导入库只是频谱中的两个极值。你也可以有一个混合的静态/导入库。
  • 关于您的第二个问题:您的意思是静态库中包含哪些DLL,还是静态库依赖于哪些DLL?

标签: windows visual-c++ static-libraries


【解决方案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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2023-01-20
相关资源
最近更新 更多