gpt4 book ai didi

c++ - Visual Studio C++ 中的静态和动态库链接

转载 作者:太空狗 更新时间:2023-10-29 21:25:50 25 4
gpt4 key购买 nike

在 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 独立。我不需要在 sta1.lib 工作的路径变量中指向 dyn2.dll 的目录吗?我是新手,所以澄清答案会很有帮助

谢谢

最佳答案

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

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

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

关于c++ - Visual Studio C++ 中的静态和动态库链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13276373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com