GCC的两个属性

 

ld.so里有这么句代码

  1. /* If we would use strong_alias here the compiler would see a non-hidden definition.  
  2. * This would undo the effect of the previous declaration.  
  3. *So spell out was strong_alias does plus add the visibility attribute.  */
  4. extern struct rtld_global _rtld_local  __attribute__ ((alias ("_rtld_global"), visibility ("hidden")));
复制代码


这句话什么意思? extern和hidden不矛盾么?关键这句话怎么解释我不明白.

文件 中还定义了一个变量  struct rtld_global _rtld_global ={.xxx=xxx, .xxx=xxx....................}
而struct rtld_global的结构定义,定义在另一个文件.


另外还想问一下,原符号定义了alias后,原符号怎么办?
是不是还如同没定义alias一般,其{全局,局部,弱},{默认,保护,隐藏,内部}这些属性都不变???

 

最佳答案fallshuang


QUOTE:
原帖由 塑料袋 于 2008-1-5 11:32 发表
extern int xxx __attribute__ (visibility ("hidden"));

链接时,xxx对所有obj可见
动态链接时,xxx仅本execute/so可见

难不成这个意思?????




难不成你没有仔细看我re的帖子么? 难不成你没有写个小程序测试下么?
so no other "module" (executable or shared library) can reference it directly.

外部app链接ld.so 时, 无法看见 _rtld_local   ,  但是glibc 中的其他 obj 能看见_rtld_local  ,就这个意思。

可以结帖了吧? 呵呵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值