我的一个可移植的C库中有当前的dilemna。我有两个高级lib(比如libA和libB)。它们提供非常不同的API,并且取决于用户配置选项。我反对将它们合并在一起,因为这将意味着合并任何后来的libC、libD和libA。所以我试着保持这种干净的分离这也意味着,如果应用程序程序员只需要libA而不需要libB,那么他们可以拥有一个轻量级应用程序。
问题是libB使用libA中的符号。不过,它使用的是libA中的低级API,我不想公开它。有没有办法在避免代码重复的同时防止暴露这个低级API?
我在UNIX上编译时使用gcc visibility flags,在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/

10-15 22:54