动态库在linux中共享全局变量

时间:2012-09-17 01:44:38

标签: linux shared-libraries dynamic-linking dynamic-loading

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

谢谢,

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

正如我评论的那样:

  • Levine关于linkers and loaders的书是一本有用的参考书。

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

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

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

  • 您可以通过strace了解您的程序,以了解所涉及的系统调用。