我在使用的一个可移植 C 库中遇到了当前的困境。我有两个高级库(比如 libA 和 libB)。它们提供非常不同的 API,并且取决于用户配置选项。我反对将它们合并在一起,因为这意味着将任何后来的 libC、libD 与 libA 合并。所以我试图保持这种清晰的分离。这也意味着,如果应用程序员只需要 libA 而不需要 libB,则他们可以拥有一个轻量级的应用程序。
问题是 libB 使用了 libA 的符号。但是,它使用了我不想公开的来自 libA 的低级 API。有没有一种方法可以防止暴露这个低级 API,同时避免代码重复?
我正在使用 gcc visibility flags在 UNIX 和 Windows 上的等效编译过程中。很明显,这些符号是可见的:
$ nm -D bin/libA.so
[...]
00000000000045e6 T low_level_func1
00000000000043d8 T low_level_func2
我可以创建一个静态低级
库吗?在构建过程中,我会将 libA 和 libB 链接到它并且从不安装或分发这个 low-level
库?
这是可移植的吗?我需要找到一个可移植的解决方案(Linux、Windows、FreeBSD、MacOSX...)
谢谢
最佳答案
我不会尝试在这里进行黑客攻击和解决方法,这是一个设计问题,解决方法最终会回复您。您可能想查看适配器设计模式:http://en.wikipedia.org/wiki/Adapter_pattern
关于c - 公开或不公开 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13007392/