是否可以嵌套静态库依赖项?


12

我在QT工作。

  1. 静态库可以依赖于另一个静态库吗?(静态Lib是通过链接另一个静态库创建的)
  2. 如果是,在链接到lib2之后,生成的lib(lib1)是否可能不包含lib2的所有代码吗?

在我的Qt项目中,我使用的是静态库,该库依赖于多个库。尽管我的代码中只需要一个库(以及该类的一个.h),但我必须添加所有库(及其项目中的所有标头)。

请说明情况。

Answers:


6

当您声明某些内容时,您只是保证在链接期间它将可用并进行唯一标识。静态库不过是用于定义格式超出标准的容器。因此,这具有以下含义:

1)我在这里不太了解您的要求,但是一个静态库可能在很大程度上依赖于另一个静态库。您要么保证在可执行文件的最后链接阶段就可以使用该库的定义(通过提供它作为链接依赖项)。或者,您可以在链接静态库的过程中“合并”它。

2)答案是,您唯一需要做的就是在链接lib1期间不链接lib2。

总的来说,根据我的经验,最好的方法是仅合并私有的库,原因是否则,当项目的其他部分与您共享依赖关系时,客户端将遇到多重定义的符号冲突。


这意味着,一个静态库依赖于另一个静态库,但包含该库的链接信息是可能的。这意味着当我需要在项目中包含第一个库时,我也必定也包含第二个库。Bcoz,第一个库不包含第二个库的全部代码,对吗?
sk patra13年

6

我对此快速说明两点:10(对不起的笑话)。

要稍微扩展,请按以下步骤进行:

1-静态库可以依赖于另一个静态库,什么都不依赖,甚至不依赖于动态库:在前两个实例中,新静态库的所有代码都将合并到新的SLL(静态链接库)中,但是,第三个选项,取决于环境可能导致SLL产生以下结果之一,

  • 它会包含从DLL(动态链接库)收集的代码所需的静态版本。
  • 或者,更可怕的是,您将拥有一个静态库,当该静态库包含在项目中时,将导致要求使用DLL进行运输,从而破坏了静态链接的整个重点。

因此,总之,您可以将静态库链接到静态库

2-如果lib1和lib2都是静态的,并且lib1已与lib2链接,则lib2的所有功能将在lib1中可用,无需包括lib2,因为lib2将在lib1内静态链接(请考虑俄罗斯娃娃,使用lib2较小)。

在您描述的场景中,必须包含的每个文件中都必须有离散功能,该功能不是静态链接的,因此需要多个文件,否则就可以包含一个文件,就可以了。

请执行以下操作:引用6个静态链接库的一个.h文件:您需要在项目中包括7个文件才能获得全部功能

包含示例1

从上述.h文件创建的一个SLL仅需要包含新的SLL即可在编译时进行链接:

包含示例2

希望这会有所帮助,并且我已经理解您的要求。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.