You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Bionic中__LIBC_HIDDEN__宏的作用是什么?

关于Android Bionic中__LIBC_HIDDEN__宏的作用

__LIBC_HIDDEN__是Android Bionic libc用于控制符号可见性的宏,核心作用是将修饰的函数/变量标记为仅在libc内部可见,外部程序或库无法直接引用这些符号。

具体细节:

  • 它本质上是GCC/Clang的__attribute__((visibility("hidden")))属性的封装,在Bionic的构建系统中会被展开为对应编译器的可见性属性。
  • 被该宏修饰的符号不会被导出到libc的动态符号表中,带来两个关键影响:
    • 外部代码无法通过动态链接调用这些函数,也不能通过dlsym等方式获取它们的地址。
    • libc内部可以自由调用这些函数,后续版本中修改函数签名甚至移除该函数,都不会影响依赖libc的外部程序,避免了ABI(应用二进制接口)兼容性问题。

结合你提供的代码场景:

你看到的两个__futex_wait_ex函数:

  1. 带static inline的版本是对外的轻量封装,直接调用底层的__futex函数,没有超时参数。
  2. 带__LIBC_HIDDEN__的版本是libc内部实现的完整版本,支持超时参数,是libc内部其他模块会调用的实现,但不会暴露给外部程序。崩溃回溯中出现这个函数,说明崩溃发生在libc内部调用这个隐藏函数的过程中。

内容的提问来源于stack exchange,提问作者Mauricio Schalch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:35:02