Chinaunix首页 | 论坛 | 博客
  • 博客访问: 872650
  • 博文数量: 87
  • 博客积分: 3324
  • 博客等级: 中校
  • 技术积分: 1003
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-17 11:37
文章分类

全部博文(87)

文章存档

2014年(3)

2013年(5)

2012年(21)

2011年(13)

2010年(7)

2009年(9)

2008年(4)

2007年(14)

2006年(11)

分类: C/C++

2007-10-22 12:07:05

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

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

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

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

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

chinaunix网友2009-08-07 14:24:48

如果将模块的.o文件也一起链接到主程序,那就是静态链接了。 没有达到动态链接的效果了.

chinaunix网友2008-07-24 18:09:14

说实话,我没有再AIX上写过,只是查资料的时候,查到了,就顺便写上了。

chinaunix网友2008-06-03 12:22:46

请问AIX动态库存取主程序全局变量,能否请高手说的再详细点啊 我使用-G 但动态库中全局变量的值全部都是初始化的跟主程序不一样 请问加什么ld选项