Linux下全局符号覆盖问题
来源:互联网 发布:ubuntu skype 4.3 编辑:程序博客网 时间:2024/06/08 15:33
在windows上,默认情况下,动态库中的符号都是对外隐藏的,除非你显示的指出要导出哪些符号,否则外界是看不到的。但是linux下情况刚好相反,对静态变量和全局变量,linux下so里面的符号对外可见。这就很容易出现一个问题,就是外界很可能会无意中修改so内部的符号或符号同名但内存结构不同,带来各种问题。有一种方法能将so里面的
符号隐藏起来,避免全局符号覆盖。
1、首先,编程参数中添加编译选项 -fvisibility=hidden,这个是隐藏符号的控制。
2、其次,在要导出的接口前添加__attribute__ ((visibility("default")))。
通过以上两步,就可以像windows平台那样,只把需要的接口或变量导出去,其他的都隐藏在so内部。
例如so中要导出一个int add(int x, int y )接口,可以这样:
gcc test.c -o test -fvisibility=hidden
然后在接口处这样处理:
#define MYAPI __attribute__ ((visibility("default")))
MYAPI int add(int x, int y);
注意:
1、window平台上导出符号的命令在是返回值和函数名中,但是linux平台这一点有所不同,需要加在返回值前面,尤其是返回const char*类型时,如果不放在返回值前面会导致异常或崩溃。
2、某些情况下,so内部的单体和外部的同名单体可能会重复导致操作无效或异常的情况,可以在编译参数里面再添加一个编译选项-Wl,-Bsymbolic,这样能彻底解决同名覆盖问题。
- Linux下全局符号覆盖问题
- linux下符号大全
- linux下So覆盖导致coredump问题的分析
- linux下So覆盖导致coredump问题的分析
- linux下so覆盖导致coredump问题的分析
- linux下cp,mv进行动态库覆盖问题分析
- Linux下文本文件中^M 符号问题的解决
- Linux下文本文件中^M 符号问题的解决
- Linux下文本文件中^M 符号问题的解决
- Linux下文本文件中^M 符号问题的解决
- Linux下文本文件中^M 符号问题的解决
- Linux下文本文件中^M 符号问题的解决
- linux下配置全局jdk
- linux用户覆盖全局(自定义)变量环境
- Linux下目录的覆盖
- Linux下合并覆盖文件夹
- dotNet C# 下的全局钩子问题
- Unity5.x 全局光照系统问题下
- FTP服务器
- Portal技术
- The Introduction of Memory Leaks
- struts2 获取request,seesion,application对象
- js返回和前进
- Linux下全局符号覆盖问题
- Windows2003 IIS6完美解决Wordpress伪静态的方法
- 创建WCF服务项目遇到的问题以及解决方法
- Unity3D开发之利用GL画曲线
- IAR编译 Warning[Pa082]:undefined behavior: the order of volatile accesses is undefined in this stateme
- 通过JavaScript操作浏览器前进后退列表
- 如何改变beamer中itemize标记的颜色
- ruby介绍的好博客
- git stash笔记