【问题标题】:static and dynamic library linking in visual studio c++Visual Studio C++中的静态和动态库链接
【发布时间】:2012-11-07 19:00:49
【问题描述】:

在 Visual Studio 2010 中,我将项目构建为一个动态库(比如 dyn1.dll),它使用另一个 dll(比如 dyn2.lib、dyn2.dll、dyn2.h 是各自的文件)。我将 dyn2.h 和 dyn2.lib 直接包含在我的项目中。并将“路径”变量设置为指向 dyn2.dll 所在的位置。这是我遵循使 dyn1.dll 工作的过程。

现在说我将我的项目构建为静态库(比如 sta1.lib),同时仍然使用 dyn2.dll、dyn2.h 和 dyn2.lib。是dyn2.lib中包含的所有代码,dyn2.dll并入sta1.lib中。

意思是 sta.lib 独立。我不需要指向路径变量中的 dyn2.dll 目录来使 sta1.lib 工作吗?我是新手,所以一个澄清的答案会很有帮助

谢谢

【问题讨论】:

    标签: c++ visual-studio-2010 dll static-libraries


    【解决方案1】:

    简单的答案是否。来自 dyn2.dll 的代码不包含在您的静态 dyn1.lib (sta1.lib) 中。事实上,您必须将 dyn2.lib 与现在使用您的静态 sta1.lib 的任何项目链接,否则您将遇到未解决的链接器错误。

    这并不是说您的静态库没有引用 dyn2.dll 中的代码;它是。但是作为一个静态库,没有PE模块。它只是带有外部引用的 .obj 代码模块的集合。这些外部引用(对 dyn2.dll)仍然需要由使用静态库中代码的人解析,而静态库中的代码又使用对 dyn2.dll 的代码引用。静态库没有“链接时间”解决方案。这只发生在您链接最终的 PE(无论是 DLL 还是 EXE)时。事情仍然需要在最终链接中修复。

    因此,回答您的第二个问题。在任何一种 情况下(静态或动态),您的最终可执行文件仍然需要对 dyn2.dll 进行加载访问,无论它在哪里。此外,它现在还必须与 dyn2.dll 导入库 (dyn2.lib) 链接,就像之前的 dyn1.dll 一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 2013-01-22
      • 2011-06-15
      • 2012-03-22
      • 1970-01-01
      • 2011-10-29
      相关资源
      最近更新 更多