动态库的符号可见性 | C & C++

在编译动态库时,可以通过 gcc 的 flag -fvisibility=[default|internal|hidden|protected] 参数修改动态库中符号的可见性,其中 default 表示符号可见,hidden 表示符号不可见,internal 和 protected 一般比较少用,这里不展开。cmake 对应的命令是 set(CMAKE_CXX_VISIBILITY_PRESET hidden)

如果想要某些符号可见,可以使用如下方式修饰函数声明:

1
void __attribute__ ((visibility ("default"))) visible_fun();

共享库设置部分符号不可见有如下好处:

  • 提升动态共享对象 DSO (Dynamic Shared Object) 的加载效率
  • 减少 DSO 的大小
  • 避免符号冲突

动态库的符号可见性 | C & C++

http://www.zh0ngtian.tech/posts/d979a13.html

作者

zhongtian

发布于

2022-07-26

更新于

2022-07-26

许可协议

评论