使用头文件确定.lib / .dll

时间:2015-05-22 03:50:40

标签: c++ dll header static-libraries

我的程序中有第三方库。

例如:

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

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

我如何知道3rdPartyHeaderA.h正在使用哪个.lib.dll。我查看了3rdPartyHeaderA.h,但没有任何信息。

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

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

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

  

它询问如何确定是否声明了函数   3rdPartyHeaderA.h在Foo.lib或Bar.lib(或Foo.dll或   Bar.dll,或其他)。 - Wyzard

2 个答案:

答案 0 :(得分:1)

除非你知道它们的相互依赖性,否则你几乎肯定必须全部添加它们。我不知道对此有何异议。

答案 1 :(得分:1)

没有自动的方式来查找&#34; lib与给定标头一起使用。编译时,链接器只需要一侧的所有函数调用和另一侧的所有库,然后开始匹配。

以下是标准解决方案,按顺序从最好到最差:

  1. 阅读您的图书馆附带的文档。添加它告诉你的lib。通常会有一些注释或指令告诉您哪些lib导出哪个头函数。

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

  3. 一旦你的程序使用很长的lib列表进行编译,你就可以逐个删除它们并尝试再次构建。如果你拿出xyz.lib并且它仍在构建,那么你就不需要那个。

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