动态库隐藏函数表

在C++中,动态库默认导出所有函数,但有时需要隐藏部分内部函数。可以通过两种方式实现:1) 使用`attribute((visibility("hidden")))`属性隐藏函数;2) 编译时添加`-fvisibility=hidden`参数,并用`__attribute__((visibility("default")))`公开特定函数。对于大量内部函数,第二种方法更适用,配合CMakeLists.txt中的`add_definitions(-fvisibility=hidden)`和自定义`EXPORT`宏来标记公开接口。
摘要由CSDN通过智能技术生成

gcc/g++编译动态库时,默认所有函数都是导出的,就是在便好的so文件中,能够看到函数表:

$readelf -s libxxx.so
Symbol table '.dynsym' contains 1188 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000054898     0 SECTION LOCAL  DEFAULT    8 
     2: 000000000068a838     0 SECTION LOCAL  DEFAULT   18 
     3: 000000000022fe60   172 FUNC    GLOBAL DEFAULT   10 unzGetGlobalComment
     4: 00000000003169c8   516 FUNC    WEAK   DEFAULT   10 _ZNSt8_Rb_treeINSt7__cxx1
     5: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND _Znam@GLIBCXX_3.4 (2)

如上命令 readelf -s 就可以查看到符号表。
gcc/g++编译时默认所有符号表可见,也就是说,我可以调用so库中的任何函数
有时候,我们需要隐藏一些函数&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值