c++ - 如何隐藏另一个包含的静态库的API?

标签 c++ c static-libraries encapsulation

我的问题是我想开发一组我想公开的 API。让它成为“SetA”。

我使用了一些第三方静态库的API,比如数学求解器。让它成为“SetB”。简而言之,SetA 使用 SetB 的 API。

因为我使用“SetB”,所以我必须包含它的头文件和静态库文件。编译时包含“SetB”库,“SetA”库包含“SetB”定义。

但是,我不希望用户因为版本或多定义问题而链接“SetB”的定义。我不希望“SetA”的用户必须处理这个问题,所以是否可以隐藏我静态链接的定义?

最佳答案

您应该使用您的工具链支持的可见性属性。如果您使用的是 clang 或 gcc,则可以使用 __attribute__((visibility ("hidden")))) 隐藏符号.另一种选择推荐here是更喜欢隐藏默认符号可见性(-fvisibility=hidden 在 gcc 中)并使用 __attribute__((可见性(“默认”) )) 在符号的声明中。

此外,要从您链接到的静态库中排除符号,您可以使用链接器选项 --exclude-libs lib1,lib2,...--exclude-libs ALL 指定所有静态库。

关于c++ - 如何隐藏另一个包含的静态库的API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28469428/

相关文章:

ios - 防止进入静态库代码

c++ - 在gcc中将共享库添加到静态库

c++ - 如何测量 std::unordered_map 的内存使用情况

c++ - OpenCL header 包含在 C++ 中的相对路径问题

c - 用 C 语言在标准输出中打印新行的最快方法?

c - 如何从文件中的行中读取字符数

c - 在静态库中包含静态库依赖项的语句

c++ - 自定义返回类型声明

c++ - Mingw32-w64 GCC 4.9.2 正则表达式错误,还是我不懂 C++?

c++ - 无法使用 gdb 输入。帮助!