-fvisibility= [ hidden | default ]

-fvisibility= [ hidden | default ] 

符号可见性编译选项,readelf -a xxx.so | grep function_name 可以查看

# readelf -a libtest.so | grep memset_s
    10: 0000000000000665    35 FUNC    GLOBAL DEFAULT   12 memset_s
    54: 0000000000000665    35 FUNC    GLOBAL DEFAULT   12 memset_s

-fvisibility=hidden 默认设置所有符号的可见性为 LOCAL,表示只在当前 lib 可见(ld 链接时不可见)

-fvisibility=default 默认设置所有符号的可见性为GLOBAL,表示全局可见(ld 链接时可见)

也可以在代码里面单独指定特定符号(函数)的可见性:

__attribute__ ((visibility ("hidden"))) int memset_s(int *a) {
    *a = 0;
}

__attribute__ ((visibility ("default"))) int memset_s(int *a) {
    *a = 0;
}
原文地址:https://www.cnblogs.com/tongyishu/p/14063099.html