循环链接库

时间:2016-05-30 18:32:48

标签: c++ linker static-linking

我们有一个应用程序,其中代码在几个库中组织,其中一些库依赖于其他库,因此我们有一个依赖树,如

App
 |
 +--------+--------+
 |        |        |
 v        v        v
lib1     lib2     lib3
 |        |
 v        v
lib3     lib3

最近有人在lib3中添加了一个新方法,它取决于lib2中定义的类,并且由于生成了循环包含,因此我们在lib3中的头文件中进行了所需类的前向声明。

现在,每个库都被编译为一个静态库,然后链接到它的相应链接列表,因此lib2位于lib2的链接列表中,lib3也位于lib2的喜欢列表中。

到目前为止,这种方法完美无缺,但我想知道有这种编译和链接依赖关系的缺点。我认为lib3的更改可能不会被lib3注意到,除非它被重新编译,但我检查了lib2中任何头文件的任何更改都会触发重新编译lib3(这里有点运气)。

我应该注意哪些其他重要缺点?

1 个答案:

答案 0 :(得分:2)

  

我应该注意哪些其他重要缺点?

嗯,为链接指定的order of libraries实际上很重要。

为了摆脱链接器用来解决这些依赖关系的顺序,通常会提供一个选项来对它们进行分组,就像这些只使用单个.obj / .o个文件池一样。

对于GCC编译器,这些选项为-Wl,--start-group,-Wl,--end-group