C++ 静态库允许的循环依赖项的编译和链接?

C++ 静态库允许的循环依赖项的编译和链接?,c++,linker,C++,Linker,尽管解决方案中的静态库之间显然存在许多循环依赖关系,但交给我的项目似乎编译和链接都很好 static library "A" constructs a class from static library "B" static library "B" constructs a class from static library "A" Executable C constructs classes from "A" and B" 我认为这是不可能的。 应该是吗?是的,有人能详细解释一下为什么这样

尽管解决方案中的静态库之间显然存在许多循环依赖关系,但交给我的项目似乎编译和链接都很好

static library "A" constructs a class from static library "B"
static library "B" constructs a class from static library "A"
Executable C constructs classes from "A" and B"
我认为这是不可能的。 应该是吗?是的,有人能详细解释一下为什么这样做吗


当我尝试将“A”和“B”转换为动态库时,如果没有链接错误,我就无法构建任何一个库。

它可以工作,因为链接符号没有键入。只要最终解决了所有符号,链接基本上就是成功的

我认为这是不可能的

你完全错了

是的,有人能详细解释一下为什么这样做吗


这里有一个。以下是。

静态库可以通过Visual Studio相互依赖。DLL不能有循环依赖路径。为什么?我需要一个关于引擎盖下发生的事情的深入解释,这样我就可以把它反馈给我的同龄人。链接是在可执行文件中完成的,而不是在静态库中完成的。这意味着在构建另一个静态库时,不需要存在来自一个静态库的符号。在构建可执行文件时,它们必须存在。解析静态库的依赖关系会在稍后发生,延迟到链接器开始处理它。你永远不能构建一个只使用a的程序。同样,你永远也不能构建一个只使用a的DLL,B也必须被链接。模块化在窗口之外,唯一简单的方法是构建一个公开两个库的DLL。我认为后一种解释非常好。我假设动态链接库就像可执行文件一样放在一起。如何将其联系起来则是另一回事。