美文网首页
关于符号的可见性

关于符号的可见性

作者: 小胖_20c7 | 来源:发表于2019-05-31 16:53 被阅读0次
    相关的宏定义
    #define __LIBC_HIDDEN__ __attribute__((visibility("hidden")))
    #define __LIBC_EXPORT__ __attribute__((visibility("default")))
    
    相关的编译项
    -fvisibility=default|hidden(这个是编译项,是gcc通知编译器的)
    -Wl,-export-dynamic or -rdynamic(这个是链接项,是gcc通知链接器的)
    
    符号可见的两个要素
    1 符号导出行为(so默认导出,exe默认只有被其它so用的符号才导出)
    2 符号可见性(编译的时候指定,默认都是可见的)
    只有1,2都判断成功,符号才会被导出到.dynsym表中
    
    基本原理
    1 -fvisibility=hidden,是编译属性,决定了每个obj中全局符号的hidden or default(visibility)
    2 完成所有obj的链接后,会根据如下规则来完成符号导出
          1 是exe(默认没有符号导出行为,但可以通过-export-dynamic改变默认行为)
          2 是so(默认是有符号导出行为的)
          3 判断完1,2后,进行符号可见性的判断(即Vis属性)
          上述条件都满足,则export符号到.dynsym表中,注意最后生成的exe或者so文件
          是没有Vis属性的,因为这个时候Vis已经整合到Bind属性中(local or global)

    相关文章

      网友评论

          本文标题:关于符号的可见性

          本文链接:https://www.haomeiwen.com/subject/lcawtctx.html