用头文件确定.lib/.dll

Determine .lib / .dll with header file

我的程序中有第 3 方库。

例如:

#INCLUDE <3rdPartyHeaderA.h>
#INCLUDE <3rdPartyHeaderB.h>

int main(int argc, char** argv)
{
  // some stuff
}

我怎么知道 3rdPartyHeaderA.h 正在使用哪个特定的 .lib.dll。我查看了 3rdPartyHeaderA.h 但没有任何信息。

我问这个问题是因为我需要确定我应该将哪个 .lib.dll 添加到项目环境中,因为我不想添加所有这些。

这可能是个愚蠢的问题。如果是这样,请随时投反对票。 谢谢。

编辑:感谢 Wyzard 澄清我的问题。

It's asking how to determine whether the functions declared in 3rdPartyHeaderA.h are defined in Foo.lib or Bar.lib (or Foo.dll or Bar.dll, or whatever). – Wyzard

您几乎肯定必须将它们全部添加,除非您了解它们的相互依赖性。我不知道反对意见可能是什么。

没有自动方法 "look up" 哪个库与给定的 header 匹配。编译时,链接器只需在一侧接受所有函数调用,在另一侧接受所有库并开始匹配。

以下是标准解决方案,按从好到坏的顺序排列:

  1. 阅读图书馆附带的文档。添加它告诉您的库。通常会有某种注释或说明告诉您哪些库导出哪些 header 函数。

  2. 添加您能找到的每个库。显然从 3rdPartyHeader 附带的那些开始,然后转到标准库。继续添加直到编译。此时不要太担心添加太多;包含您不使用的库通常是安全的,因为链接器根本不会在您的可执行文件中引入该代码。

一旦您的程序可以使用一长串库进行编译,您就可以开始一个一个地删除它们并尝试重新构建。如果你取出 xyz.lib 并且它仍然构建,那么你不需要那个。

  1. 最后,您可以查看 lib 文件内部以查看它们导出了哪些函数,并将其与 header 中的函数列表进行比较。有关详细信息,请参阅 How to See the Contents of library。在大多数情况下,这是不必要的。如果您有正确的库,链接器将找到您的函数。