.framework设置函数的可见性
visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。
g++在编译时,可用参数-fvisibility
指定所有符号的可见性(不加此参数时默认外部可见,参考man g++中-fvisibility部分);若需要对特定函数的可见性进行设置,需在代码中使用__attribute__
设置visibility
属性。
编写大型程序时,可用-fvisibility=hidden
设置符号默认隐藏,针对特定变量和函数,在代码中使用 __attribute__ ((visibility("default")))
令该符号外部可见,这种方法可用有效避免so之间的符号冲突。
当我们使用Xcode封装一个.framework的库时,我们可以使用-fvisibility=hidden
设置所有函数默认不可见,如下图所示:
当我们将库函数设置为默认不可见时,我们仍在外部调用库函数时会出现类似这样的错误:
ld:symbol(s) not found