使用未定义的符号构建库(C ++)

时间:2014-04-04 20:14:06

标签: c++ linker

我在C ++中为项目/产品提供了以下线性依赖关系树:

Product <- C <- B <- A

A, BC分别构建。 A,BC在最终Product中相关联,并且工作正常。

现在我用nm检查例如C

http://linux.about.com/library/cmd/blcmdl1_nm.htm

我收到了一堆未定义的符号,因为它是我第一次组装所需的依赖树链接在一起的Product

是否存在lib必须始终定义其所有符号的约定(意味着依赖关系必须在部署之前链接到使用的lib中)?或者是否可以在较高级别部署与其依赖关系链接在一起的“裸”库?

2 个答案:

答案 0 :(得分:1)

来自Windows世界:

我在公司内部看到过这种情况。将代码库分成几个静态库,并根据每个产品的需要将它们以不同的组合链接在一起。

我也在公共SDK中看到了它,其中功能分为几个DLL,其中一些相互依赖,另一些是可选的,具体取决于您需要的功能。

这对我来说似乎并不寻常。

答案 1 :(得分:1)

我也见过这个。这种情况发生在很多遗留软件中。该库可能在​​它开始时设计得很好,然后一些软件mods后来制作,事情有点草率。它都编译并运行,但库并没有完全封装它们最初所做的任何功能集。

这是一个商业决策。要解决这个问题,可能需要做大量的工作并重新测试才能获得相同的产品。随着时间的推移慢慢地重构libs更有意义...或者当下一个主要版本的功能影响lib时完全替换它们。