C++ visual studio c+中的静态和动态库链接+;
在VisualStudio2010中,我构建了一个动态库(比如dyn1.dll),它使用另一个dll(比如dyn2.lib、dyn2.dll、dyn2.h是各自的文件)。我将dyn2.h和dyn2.lib直接包含在我的项目中。并将“path”变量设置为指向dyn2.dll所在的位置。这是我使dyn1.dll工作所遵循的过程 现在假设我将我的项目构建为一个静态库(比如sta1.lib),同时仍然使用dyn2.dll、dyn2.h和dyn2.lib。dyn2.lib中包含的所有代码,dyn2.dll是否合并到sta1.lib中 意思是sta.lib独立。我是否不需要指向path变量中的dyn2.dll目录,sta1.lib才能工作?我对这些都不熟悉,所以一个清晰的答案会非常有帮助C++ visual studio c+中的静态和动态库链接+;,c++,visual-studio-2010,dll,static-libraries,C++,Visual Studio 2010,Dll,Static Libraries,在VisualStudio2010中,我构建了一个动态库(比如dyn1.dll),它使用另一个dll(比如dyn2.lib、dyn2.dll、dyn2.h是各自的文件)。我将dyn2.h和dyn2.lib直接包含在我的项目中。并将“path”变量设置为指向dyn2.dll所在的位置。这是我使dyn1.dll工作所遵循的过程 现在假设我将我的项目构建为一个静态库(比如sta1.lib),同时仍然使用dyn2.dll、dyn2.h和dyn2.lib。dyn2.lib中包含的所有代码,dyn2.dll
谢谢简单的答案是不。来自dyn2.dll的代码未包含在静态dyn1.lib(sta1.lib)中。事实上,您必须将dyn2.lib链接到现在使用静态sta1.lib的任何项目,否则将出现未解决的链接器错误 这并不是说静态库没有引用dyn2.dll中的代码;它是。但是作为一个静态库,没有PE模块。它只是带有外部引用的.obj代码模块的集合。那些外部引用(到dyn2.dll)仍然需要由使用静态库中的代码的人解析,而静态库反过来使用到dyn2.dll的代码引用。静态库没有“链接时间”解析。只有在链接最终PE(无论是DLL还是EXE)时才会发生这种情况。事情还需要在最后一个环节解决 因此,我想回答你的第二个问题。无论哪种情况(静态还是动态),最终可执行文件仍然需要具有对dyn2.dll的加载访问权限,无论它位于何处。此外,它现在还必须与dyn1.dll导入库(dyn2.lib)链接,就像之前的dyn1.dll一样