Linux GNUC __attribute__属性介绍(一)

发布时间 2023-06-07 07:22:40作者: 寒魔影

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