c++ __attribute__关键字

__attribute__((visibility("default")))

这个关键字与gcc编译参数-fvisibility=hidden配合使用,如果使用了hidden参数,那么该.so库所有符号只对内可见,对外不可见,即使链接了这个.so库,还是不能调用其中的符合(函数等);

对于大型工程,为了避免同名符号冲突(默认情况下,先链接的.so库符号会被可执行程序先链接,即如果有两个fun函数,分别在a.sob.so,先链接a,则使用a的fun函数),可以先使用-fvisibility=hidden将所有符号隐藏,然后在需要对外的符号前添加__attribute__((visibility("default")))属性来保证符号对外可见。

当然也可以反过来,将-fvisibility设置为"default"或不设置这个属性,默认所有符号都对外可见,然后在不对外可见的函数或变量前添加__attribute__((visibility("hidden")))来隐藏该符号。

发布了42 篇原创文章 · 获赞 33 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/gaussrieman123/article/details/90054156