C++ 编译使用C+中的另一个库的库+;

C++ 编译使用C+中的另一个库的库+;,c++,c,C++,C,我不太明白使用另一个库的库的编译是如何工作的。据我所知,有4种情况: 1) 编译使用静态库(B)的静态库(a):编译可以工作,但针对库a的链接不起作用,因为静态库只是一个存档,包含由a编译而来的.o文件,而不是从B编译而来的文件。创建静态库时,编译阶段搜索函数定义并在标题中找到它们。在链接阶段,编译器在库B中搜索函数实现,如果找到它们,则编译成功,但实际上没有将函数实现放在静态库A中。这就是为什么在与库A链接时它不起作用的原因 2) 编译一个使用动态库的静态库:我认为创建和使用都可以,但是为什么

我不太明白使用另一个库的库的编译是如何工作的。据我所知,有4种情况:

1) 编译使用静态库(B)的静态库(a):编译可以工作,但针对库a的链接不起作用,因为静态库只是一个存档,包含由a编译而来的.o文件,而不是从B编译而来的文件。创建静态库时,编译阶段搜索函数定义并在标题中找到它们。在链接阶段,编译器在库B中搜索函数实现,如果找到它们,则编译成功,但实际上没有将函数实现放在静态库A中。这就是为什么在与库A链接时它不起作用的原因

2) 编译一个使用动态库的静态库:我认为创建和使用都可以,但是为什么呢?编译器在DLL/so中实际放了什么

3) 编译使用静态库的动态库:这样行吗

4) 编译一个使用另一个动态库的动态库:这也可以吗


谢谢您的时间。

< P>如果您在C或C++中创建了一个库或程序,则构建过程由两个步骤组成:

  • 将每个C/C++文件编译为对象文件

  • 链接对象文件并创建库或可执行文件(如果创建静态库,它不是真正的链接;但是为了简单起见,让我们使用这个词。)

  • 顺从

    如果编译使用库的代码,则需要库的头文件(.h)。它们声明库中的公共函数和类。编译时不需要使用二进制文件

    链接

    对于链接步骤,您需要静态或动态库的二进制文件(.lib或.a用于静态库,.dll或.so用于动态库)

    库之间的依赖关系

    如果创建静态库,则所有对象文件都将放入新的库文件中。将不包括已使用库中的任何内容(静态或动态)。但当有人使用你的图书馆时,它是需要的。所以你的图书馆不是独立的

    如果创建动态库并使用静态库,则静态库中必要的代码将包含在动态库中。就所使用的库而言,新的动态库将是自包含的


    如果创建动态库并使用动态库,则仅包含对已使用库的引用。因此,要运行最终产品,新库和已使用库都必须可用。

    所有这些组合都将起作用,您对此有何实际疑问?欢迎使用Stack Overflow。请花点时间阅读并参考你可以在这里询问什么和如何提问的材料。关于这种情况,你可以在1)发布一个复制准确错误的请柬(并逐字发布错误文本)。(1)构建静态库不涉及链接器;该场景中没有“链接阶段”。不以任何方式查阅图书馆B。与场景(2)相同。不存在“使用另一个库的静态库”这样的事情。静态库是对象的存档,这些对象可能有也可能没有未解析的引用。如何满足这些参考文献由图书馆用户决定。谢谢!现在清楚多了。我一直想知道人们从哪里学到这样的细节。多年的经验,一件一件,各种来源:书籍、手册、网络、调查和观察事物。。。