我正在使用我正在使用的一个可移植C库中的当前困境。我有两个高级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
我可以创建静态low-level
库吗?在构建期间,我将链接libA& libB反对它,永远不会安装或分发这个low-level
库?
这是便携式吗?我需要找到一个可移植的解决方案(Linux,Windows,FreeBSD,MacOSX ......)
由于
答案 0 :(得分:0)
我不会尝试在这里进行黑客攻击和解决方法,这是一个设计问题,并且解决方法最终会回复给您。您可能需要查看适配器设计模式:http://en.wikipedia.org/wiki/Adapter_pattern