【发布时间】:2011-12-29 02:38:16
【问题描述】:
使用gcc 构建共享库时,可以使用-fvisibility=hidden 限制符号的可见性。我还刚刚了解到您可以使用版本脚本选项将可见性限制为 ld。
现在我想知道是否可以将这些结合起来。假设我有一个包含以下内容的程序:
void foobar() {}
void say_hello() {}
然后我有版本脚本文件:
{
global:
foobar;
}
我编译这个:
gcc -fvisibility=hidden -Wl,--version-script=<version-script> test.c -shared -o libtest.so
当我之后运行nm 时,我发现没有导出任何符号。无论如何我可以将默认可见性设置为隐藏并使用版本脚本(或其他东西)来导出符号?
【问题讨论】:
-
在这里gcc.gnu.org/wiki/Visibility,它说“有些人可能会建议GNU链接器版本的脚本也可以做到这一点。也许对于C程序这是真的,但对于C++它不可能是真的...... ",似乎不建议使用这个。
标签: gcc shared-libraries ld