Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ visual studio c+中的静态和动态库链接+;_C++_Visual Studio 2010_Dll_Static Libraries - Fatal编程技术网

C++ visual studio c+中的静态和动态库链接+;

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

在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才能工作?我对这些都不熟悉,所以一个清晰的答案会非常有帮助


谢谢

简单的答案是不。来自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一样