gcc 的visibility 使用(zz)

}

想要做的是,第一个函数符号可以被导出,第二个被隐藏。
先编译成一个动态库,使用到属性-fvisibility
gcc -shared -o libvis.so -fvisibility=hidden vis.c

现在查看
# readelf -s libvis.so |grep hidden
7: 0000040c    20 FUNC    GLOBAL DEFAULT   11 not_hidden
48: 00000420    20 FUNC    LOCAL  HIDDEN   11 is_hidden
51: 0000040c    20 FUNC    GLOBAL DEFAULT   11 not_hidden
可以看到,属性确实有作用了。

现在试图link
vi main.c
int main()
{
not_hidden();
is_hidden();
return 0;
}

试图编译成一个可执行文件,链接到刚才生成的动态库,
gcc -o exe main.c -L ./ -lvis
结果提示:

/tmp/cckYTHcl.o: In function `main':
main.c:(.text+0x17): undefined reference to `is_hidden'

说明了hidden确实起到作用了。

相关文章:

  • 2021-12-16
  • 2022-01-03
  • 2021-10-02
  • 2021-10-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-02-14
  • 2021-11-29
  • 2021-11-17
  • 2022-02-18
  • 2022-12-23
  • 2021-06-26
  • 2021-12-17
相关资源
相似解决方案