是否可以在C / C ++中的其他库中包含静态链接库?

时间:2015-08-26 09:16:10

标签: c++

在我的项目中,我在一个静态链接库中有一些共享代码,这些库由多个子项目使用,每个子项目都构建自己的可执行文件。我使用ar.o文件创建库。部分共享代码取决于静态链接的第三方库。

目前,我必须在每个makefile中包含所有第三方库(对于每个可执行文件)并将它们传递给g++。是否可以将这些库包含在子项目共享的一个库中,因此在构建不同的可执行文件时,我不必显式引用它们?或者我的方法总体上有问题吗?

1 个答案:

答案 0 :(得分:1)

不是你想要的方式。基本上静态库只是要链接的一堆目标文件,并且一个目标文件无法暗示自动包含另一个目标文件。因此,静态库不能调用另一个静态库自动包含在链接中。另一方面,对于动态库,库本身可以引用另一个(动态)链接的库。

可以做的是使用隐式链接描述文件代替静态库,该库指出应包含哪个库。例如,在libfoo.a

INPUT(-lreal-foo)
INPUT(-lbar)

意味着-lfoo告诉链接器包含-lreal-foo(这意味着您原来的.a文件)和-lbar这意味着它所依赖的库。

工作是每当链接器被告知与libfoo.a链接时,当它意识到它不是存档(即.a文件)或目标文件时,它将尝试将其解释为链接器脚本。然后,INPUT命令指示链接器包含那些在那时指定的文件,特别是如果它们位于-lFILE表单上,它将表现为-lFILE包含在命令行。