制作一个共享库
/* 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"))) 可以使函数对外可见