Linux GNUC __attribute__属性介绍(一)
visibility
visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。
gcc在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man g++中-fvisibility部分);
若需要对特定函数的可见性进行设置, 需在代码中使用__attribute__设置visibility属性。
编写大型程序时,可用-fvisibility=hidden设置符号默认隐藏,针对特定变量和函数,
在代码中使用__attribute__ ((visibility("default")))另该符号外部可见,这种方法可用有效避免so之间的符号冲突。
#ifndef _GTC_TEST_H_INCLUDED_ #define _GTC_TEST_H_INCLUDED_ #ifndef EXPORT_API #if defined(_MSC_VER) #define EXPORT_API __declspec(dllexport) #elif defined(__GNUC__) #define EXPORT_API __attribute__((visibility("default"))) #else #define EXPORT_API #endif #endif #ifdef __cplusplus extern "C" { #endif EXPORT_API int func(void); #ifdef __cplusplus } #endif #endif /* _GTC_TEST_H_INCLUDED_ */
makefile
CXXFLAGS = -fvisibility=hidden