并动态库共享,在linux全局变量(does dynamic library shared glob

2019-09-22 12:10发布

我们知道,Linux的通话ldconfig加载所有*.so库,然后链接谁使用共享库的应用程序。 不过,我很困惑如何全局变量在这种情况下工作。 由于只有一个共享库的副本在所有这些应用程序,请他们分享在共享库中的全局变量? 如果是的话,那么他们是如何同步?

谢谢,

Answer 1:

没有它不共享 - 库的代码/文字部分是共享 - 数据部分是唯一的,它使用的库中的每个处理



Answer 2:

正如我说:

  • 莱文的书链接器和加载是一个有用的参考。

  • Linux的动态连接器ld.so是免费软件的一部分, GNU libc中 ,你可以学习,提高它的源代码

  • 动态接头ld.soldconfig (通过使用其刚刚更新缓存信息ld.so )。

  • 所述ld.so接头使用MMAP(2)系统调用来突出一些.so段到进程的虚拟地址空间; “文本”链段(用于代码和只读常量)使用MAP_SHAREDPROT_READ 。 “数据”段(在C或C ++全局或静态变量)使用MAP_PRIVATEPROT_WRITE

  • 你会用学到很多strace -ing程序来获得所涉及的系统调用的感觉。



文章来源: does dynamic library shared global variable in linux