在我正在使用的一个便携式 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...)
谢谢