在主程序及动态链接库里的全局变

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

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

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

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

动态连接库存取主程序里定义的全局变量
在linux上,链接主程序的时候,使用参数-Wl,--export-dynamic
在AIX上,使用'deferred imports' 并且 enable 'runtime linking'.

 

PS:在linux 下 加入-export -dynamic 可以实现

 

https://blog.csdn.net/liangyuannao/article/details/8086423

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章