gcc __attribute__关键字举例之visibility
2015-06-24 14:33
204 查看
visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见。
g++在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man
g++中-fvisibility部分);若需要对特定函数的可见性进行设置,需在代码中使用__attribute__设置visibility属性。
编写大型程序时,可用-fvisibility=hidden设置符号默认隐藏,针对特定变量和函数,在代码中使用__attribute__((visibility("default")))令该符号外部可见,这种方法可用有效避免so之间的符号冲突。
//.cpp
__attribute ((visibility("default"))) int engine_init(config_ *cfg)
{}
//makefile
CC = g++
CFLAGS += -Wall -Werror ${HDTCL} -fPIC -fvisibility=hidden
结果是:
engine_init接口外部可见,其他没有添加__attribute ((visibility("default")))说明的接口外部不可见。
g++在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man
g++中-fvisibility部分);若需要对特定函数的可见性进行设置,需在代码中使用__attribute__设置visibility属性。
编写大型程序时,可用-fvisibility=hidden设置符号默认隐藏,针对特定变量和函数,在代码中使用__attribute__((visibility("default")))令该符号外部可见,这种方法可用有效避免so之间的符号冲突。
//.cpp
__attribute ((visibility("default"))) int engine_init(config_ *cfg)
{}
//makefile
CC = g++
CFLAGS += -Wall -Werror ${HDTCL} -fPIC -fvisibility=hidden
结果是:
engine_init接口外部可见,其他没有添加__attribute ((visibility("default")))说明的接口外部不可见。
相关文章推荐
- JavaScript面向对象精要(二)
- 扩展ASP.NET Identity使用Int做主键
- greenplum学习
- UIView的setNeedsLayout, layoutIfNeeded 和 layoutSubviews 方法之间的关系解释
- android让界面不被弹出的键盘挤上去
- UIFont 字体与字体的列表
- 垃圾回收机制--回收周期
- 裸奔必备:沙盘Sandboxie 4.19.4最新版下载
- 【数据结构】栈
- JavaScript面向对象精要(一)
- UITouch的用法
- MemoryCache安装与使用
- Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的关系
- iOS 开发学习36 reveal使用
- 垃圾回收机制--引用计数基本知识
- 哪些云计算企业能活下来
- 深入安卓Package Manager和Package Installer
- STM32GPIO八种工作模式区别
- 轻便时尚 富士X-A2套机售3199元
- window.close(); 谷歌浏览器不好用的解决方案