在我的项目中,我在一个静态链接库中有一些共享代码,这些库由多个子项目使用,每个子项目都构建自己的可执行文件。我使用ar
从.o
文件创建库。部分共享代码取决于静态链接的第三方库。
目前,我必须在每个makefile中包含所有第三方库(对于每个可执行文件)并将它们传递给g++
。是否可以将这些库包含在子项目共享的一个库中,因此在构建不同的可执行文件时,我不必显式引用它们?或者我的方法总体上有问题吗?
答案 0 :(得分:1)
不是你想要的方式。基本上静态库只是要链接的一堆目标文件,并且一个目标文件无法暗示自动包含另一个目标文件。因此,静态库不能调用另一个静态库自动包含在链接中。另一方面,对于动态库,库本身可以引用另一个(动态)链接的库。
可以做的是使用隐式链接描述文件代替静态库,该库指出应包含哪个库。例如,在libfoo.a
:
INPUT(-lreal-foo)
INPUT(-lbar)
意味着-lfoo
告诉链接器包含-lreal-foo
(这意味着您原来的.a
文件)和-lbar
这意味着它所依赖的库。
工作是每当链接器被告知与libfoo.a
链接时,当它意识到它不是存档(即.a
文件)或目标文件时,它将尝试将其解释为链接器脚本。然后,INPUT
命令指示链接器包含那些在那时指定的文件,特别是如果它们位于-lFILE
表单上,它将表现为-lFILE
包含在命令行。