我们知道,Linux的通话ldconfig
加载所有*.so
库,然后链接谁使用共享库的应用程序。 不过,我很困惑如何全局变量在这种情况下工作。 由于只有一个共享库的副本在所有这些应用程序,请他们分享在共享库中的全局变量? 如果是的话,那么他们是如何同步?
谢谢,
我们知道,Linux的通话ldconfig
加载所有*.so
库,然后链接谁使用共享库的应用程序。 不过,我很困惑如何全局变量在这种情况下工作。 由于只有一个共享库的副本在所有这些应用程序,请他们分享在共享库中的全局变量? 如果是的话,那么他们是如何同步?
谢谢,
没有它不共享 - 库的代码/文字部分是共享 - 数据部分是唯一的,它使用的库中的每个处理
正如我说:
莱文的书链接器和加载是一个有用的参考。
Linux的动态连接器ld.so
是免费软件的一部分, GNU libc中 ,你可以学习,提高它的源代码
动态接头ld.so
不ldconfig
(通过使用其刚刚更新缓存信息ld.so
)。
所述ld.so
接头使用MMAP(2)系统调用来突出一些.so
段到进程的虚拟地址空间; “文本”链段(用于代码和只读常量)使用MAP_SHARED
与PROT_READ
。 “数据”段(在C或C ++全局或静态变量)使用MAP_PRIVATE
与PROT_WRITE
你会用学到很多strace
-ing程序来获得所涉及的系统调用的感觉。