我在C ++中为项目/产品提供了以下线性依赖关系树:
Product <- C <- B <- A
A, B
和C
分别构建。 A,B
和C
在最终Product
中相关联,并且工作正常。
现在我用nm检查例如C
:
http://linux.about.com/library/cmd/blcmdl1_nm.htm
我收到了一堆未定义的符号,因为它是我第一次组装所需的依赖树链接在一起的Product
。
是否存在lib必须始终定义其所有符号的约定(意味着依赖关系必须在部署之前链接到使用的lib中)?或者是否可以在较高级别部署与其依赖关系链接在一起的“裸”库?
答案 0 :(得分:1)
来自Windows世界:
我在公司内部看到过这种情况。将代码库分成几个静态库,并根据每个产品的需要将它们以不同的组合链接在一起。
我也在公共SDK中看到了它,其中功能分为几个DLL,其中一些相互依赖,另一些是可选的,具体取决于您需要的功能。
这对我来说似乎并不寻常。
答案 1 :(得分:1)
我也见过这个。这种情况发生在很多遗留软件中。该库可能在它开始时设计得很好,然后一些软件mods后来制作,事情有点草率。它都编译并运行,但库并没有完全封装它们最初所做的任何功能集。
这是一个商业决策。要解决这个问题,可能需要做大量的工作并重新测试才能获得相同的产品。随着时间的推移慢慢地重构libs更有意义...或者当下一个主要版本的功能影响lib时完全替换它们。