__attribute__ ((default)) 和 __attribute__ ((hidden))

时间:2022-01-04 19:35:48

制作一个共享库

 /* a.h */
int func();
 /* a.c */
#include <stdio.h>
#include "a.h" int func()
{
printf("### func ###\n");
return ;
}
gcc -shared -o liba.so a.c -fPIC

main.c

 #include "a.h"

 int main()
{
func();
return
}
gcc -o main main.c -la -L. -Wl,-rpath=.

如果在 func 前面加上

__attribute__((visibility("hidden")))

在编译 main 时,报错:

/tmp/ccbxiXwp.o: In function `main':
main.c:(.text+0x7): undefined reference to `func'
collect2: error: ld returned exit status

如果在编译动态库时加上 -fvisibility=hidden,表示动态库的符号都是 hidden的

在函数前加上 __attribute__((visibility("default"))) 可以使函数对外可见