Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3934572
  • 博文数量: 93
  • 博客积分: 3189
  • 博客等级: 中校
  • 技术积分: 4229
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-02 13:29
个人简介

出没于杭州和青岛的程序猿一枚,对内核略懂一二

文章分类

全部博文(93)

文章存档

2016年(2)

2015年(3)

2014年(11)

2013年(29)

2012年(16)

2011年(5)

2010年(5)

2009年(22)

分类: LINUX

2010-03-03 11:31:37

曾经在一次写程序的时候,全局使用一个日志对象,所有的日志信息都由此日志对象写入文件。但是发现在动态链接库里,无法存取到该全局对象,后经查找资料。发现,动态链接库是否能存取主程序的全局变量,主程序是否能存取动态链接库里定义的全局变量都是可以通过链接指令改变此行为。

主程序存取动态链接库里的全局变量

例如动态库里定义全局变量int i, 在主程序里申明extern int i。 则,主程序存取的就是动态库里定义的i。在所有的UNIX平台上这是默认的行为(注意:实际定义i的 模块的点o文件,必须同时链接到动态库和主程序上,否则链接报错)。

如果不想让主程序能存取动态库里的全局变量,则在链接动态连接库的时候,给gcc传入-Wl,-Bsymbolic即可。

动态连接库存取主程序里定义的全局变量
在linux上,链接主程序的时候,使用参数-Wl,--export-dynamic
在AIX上,使用'deferred imports' 并且 enable 'runtime linking'.
阅读(17355) | 评论(3) | 转发(6) |
给主人留下些什么吧!~~

lein3172018-04-20 16:19:51

必须要绑定手机号,并且大喊:威武,牛批!

一下解决了我的苦恼!!

瀚海书香2013-03-25 15:45:32

ryyral:"在linux上,链接主程序的时候,使用参数-Wl,--export-dynamic"
是编译动态链接库是加的选项吗?
那么动态链接库中怎么引用该变量呢,前面要加extern吗?

应该是连接库和主程序的时候的连接选项

回复 | 举报

ryyral2013-03-25 13:30:51

"在linux上,链接主程序的时候,使用参数-Wl,--export-dynamic"
是编译动态链接库是加的选项吗?
那么动态链接库中怎么引用该变量呢,前面要加extern吗?