在linux中dynamic库共享全局variables

我们知道,linux调用ldconfig加载所有*.so库,然后链接使用共享库的应用程序。 但是,我很困惑这个全局variables是如何工作的。 由于在所有这些应用程序中只有一个共享库的副本,它们共享共享库中的全局variables吗? 如果是,那么他们如何同步?

谢谢,

不,它不是共享的 – 库的代码/文本部分是共享的 – 数据部分对于使用库的每个进程是唯一的

正如我所评论的:

  • Levine关于连接器和装载机的书是一个有用的参考。

  • Linux动态连接器ld.so是免费软件,是GNU libc的一部分,您可以学习和改进其源代码

  • 动态链接器是ld.so不是ldconfig (它只是更新ld.so使用的缓存信息)。

  • ld.so连接器正在使用mmap(2)系统调用将一些.so分段投影到进程的虚拟地址空间中; “文本”段(对于代码和只读常量)使用MAP_SHAREDPROT_READ 。 “数据”段(对于C或C ++中的全局或静态变量)使用MAP_PRIVATEPROT_WRITE

  • 你可以通过分析你的程序来学习很多东西来获得系统调用的感觉。