我们有一个应用程序,其中代码在几个库中组织,其中一些库依赖于其他库,因此我们有一个依赖树,如
App
|
+--------+--------+
| | |
v v v
lib1 lib2 lib3
| |
v v
lib3 lib3
最近有人在lib3中添加了一个新方法,它取决于lib2中定义的类,并且由于生成了循环包含,因此我们在lib3中的头文件中进行了所需类的前向声明。
现在,每个库都被编译为一个静态库,然后链接到它的相应链接列表,因此lib2位于lib2的链接列表中,lib3也位于lib2的喜欢列表中。
到目前为止,这种方法完美无缺,但我想知道有这种编译和链接依赖关系的缺点。我认为lib3的更改可能不会被lib3注意到,除非它被重新编译,但我检查了lib2中任何头文件的任何更改都会触发重新编译lib3(这里有点运气)。
我应该注意哪些其他重要缺点?
答案 0 :(得分:2)
我应该注意哪些其他重要缺点?
嗯,为链接指定的order of libraries实际上很重要。
为了摆脱链接器用来解决这些依赖关系的顺序,通常会提供一个选项来对它们进行分组,就像这些只使用单个.obj
/ .o
个文件池一样。
对于GCC编译器,这些选项为-Wl,--start-group
,-Wl,--end-group
。