Visual c++ 在VisualStudio中,什么控制一个.lib文件是否可以合并到另一个.lib文件中?

Visual c++ 在VisualStudio中,什么控制一个.lib文件是否可以合并到另一个.lib文件中?,visual-c++,visual-studio-2012,boost,linker,static-libraries,Visual C++,Visual Studio 2012,Boost,Linker,Static Libraries,关于以下问题的答复: 实际上,我已经生成了一个库a.lib,它依赖于我们的另一个内部库B.lib,以及Boost库libboost_system-vc110-mt-gd-1_51.lib和libboost_filesystem-vc110-mt-gd-1_51.lib 现在,我的另一个团队的同事正在使用我的库A.lib,正如我在阅读上述答案时所期望的那样,他得到了一个链接器错误,因为他的链接器路径中没有boost库 我解决了这个问题,只需将特定的boost库打包到与A.lib相同的文件夹中 然而

关于以下问题的答复:

实际上,我已经生成了一个库a.lib,它依赖于我们的另一个内部库B.lib,以及Boost库libboost_system-vc110-mt-gd-1_51.lib和libboost_filesystem-vc110-mt-gd-1_51.lib

现在,我的另一个团队的同事正在使用我的库A.lib,正如我在阅读上述答案时所期望的那样,他得到了一个链接器错误,因为他的链接器路径中没有boost库

我解决了这个问题,只需将特定的boost库打包到与A.lib相同的文件夹中

然而,让我困惑的是,这实际上似乎是可行的。为什么链接器不抱怨B.lib丢失


B.lib是由另一个团队构建的(我没有访问源代码的权限),因此在我看来,链接到它应该等同于链接到一个boost库。

我的猜测是,你的同事只是碰巧使用了a.lib中不依赖于B.lib的部分。依赖关系是打包到lib中的各个.obj文件之间的依赖关系,而不是整个lib文件之间的依赖关系。那么,a.lib只包含一个函数,它调用B.lib中的函数以及Boost库中的函数。这就是让我困惑的地方。似乎B.lib所需的函数A.lib被合并到了A.lib中,而A.lib所需的Boost函数则不适用于A.lib。例如,B.lib定义了类X和Y,而A.lib定义了从类Y派生的类Z并调用了X.Foo(),后者又调用了虚拟Y.Bar()。编译器/链接器是否可以决定将X.Foo()合并到A.lib中?如果
X::Foo
是在头中定义的,那么它可以内联(因此,从某种意义上说,可以合并到A.lib中)。是的,这可以解释它,但是X中的所有方法都只在头中声明,即不内联。