1

在我正在使用的一个便携式 C 库中,我遇到了当前的困境。我有两个高级库(比如 libA 和 libB)。它们提供了非常不同的 API,并且取决于用户配置选项。我反对将它们合并在一起,因为这意味着将任何以后的 libC、libD 与 libA 合并。所以我试图保持这种干净的分离。这也意味着,如果应用程序员只需要 libA 而不需要 libB,他们就可以拥有一个轻量级的应用程序。

问题是 libB 使用来自 libA 的符号。但是,它使用了我不想公开的 libA 中的低级 API。有没有办法防止暴露这个低级 API,同时避免代码重复?

我在 UNIX 上编译期间使用gcc 可见性标志,在 Windows 上使用等效标志。很明显,这些符号是可见的:

$ nm -D bin/libA.so
[...]
00000000000045e6 T low_level_func1
00000000000043d8 T low_level_func2

我可以创建一个静态low-level库吗?在构建过程中,我会将 libA 和 libB 链接到它,并且永远不会安装或分发这个low-level库?这是便携式的吗?我需要找到一个可移植的解决方案(Linux、Windows、FreeBSD、MacOSX...)

谢谢

4

1 回答 1

0

我不会在这里尝试做黑客和变通方法,这是一个设计问题,做变通方法最终会回复你。您可能想查看适配器设计模式:http ://en.wikipedia.org/wiki/Adapter_pattern

于 2012-10-22T08:45:04.107 回答