編譯一個1.c文件:
#include "stdio.h"
#if defined(__GNUC__) && \
((__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3))
#define NP_VISIBILITY_DEFAULT __attribute__((visibility("default")))
#else
#define NP_VISIBILITY_DEFAULT
#endif
#define NP_EXPORT(__type) NP_VISIBILITY_DEFAULT __type
NP_EXPORT(int) a()
{
printf("1.c i am a\0");
return 0;
}
int b()
{
return 0;
}
我的目的是默認沒有使用NP_EXPORT宏的函數都隱藏起來,即把b函數給隱藏起來,而a函數則導出去。
我的編譯步驟和指令如下:
gcc -c 1.c
gcc –fPIC -shared -fvisibility=hidden -o 1.so 1.o
編譯后生成了1.so文件。
我使用nm工具查看,這個時候就可以達到隱藏不必要的函數,而只是導出定義過的函數。