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

Building a library with undefined symbols (C++)

本文关键字:C++ 构建 符号 未定义      更新时间:2023-10-16

我在C++中有一个项目/产品的线性依赖树:

Product <- C <- B <- A

A, BC分别是单独构建的。 A,BC在最终Product中链接,并且工作正常。

现在,当我使用 nm 检查例如C时:

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

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

是否有任何约定,即库必须始终定义其所有符号(这意味着在部署之前必须将依赖项链接到使用库)?或者是否可以接受在更高级别部署与其依赖项链接在一起的"裸"库?

来自 Windows 世界:

我见过它在公司内部使用。 将代码库分成几个静态库,并根据每个产品的需求以不同的组合将它们链接在一起。

我也在公共 SDK 中看到过它,其中功能在多个 DLL 之间划分,其中一些相互依赖,其他是可选的,具体取决于您需要的功能。

这对我来说并不罕见。

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

这是一个商业决策。要修复它,可能需要大量的工作和重新测试才能最终得到相同的产品。随着时间的推移,慢慢重构有意义的库更有意义......或者在下一个主要版本的功能影响库时完全替换它们。