2

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

谢谢,

4

2 回答 2

5

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

于 2012-09-17T01:48:04.203 回答
1

正如我评论的那样:

  • Levine 的关于链接器和加载器的书是一本有用的参考书。

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

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

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

  • strace通过对程序进行操作以了解所涉及的系统调用,您将学到很多东西。

于 2012-09-17T05:46:32.030 回答