有什么办法可以使全局变量既“隐藏”和“别名”?这似乎以下就足够了:使全局变量“隐藏”和“别名”
int __voo __attribute__((visibility("hidden")));
extern int voo __attribute__((weak,alias("__voo")));
但是这会导致:
$ gcc -c alias.c
/tmp/cczCek0H.s: Assembler messages:
/tmp/cczCek0H.s:5: Error: `voo' can't be equated to common symbol '__voo'
删除“弱”没有效果。 但是,向变量声明中添加“static”允许链接成功,但不是所需的效果,因为静态将变量可见性范围限制在编译单元中,而不是范围更广的链接对象。
GCC 4.8.5和GCC 5.3.1都显示相同的行为。