我们知道,linux调用ldconfig
加载所有*.so
库,然后链接使用共享库的应用程序。 但是,我很困惑这个全局variables是如何工作的。 由于在所有这些应用程序中只有一个共享库的副本,它们共享共享库中的全局variables吗? 如果是,那么他们如何同步?
谢谢,
不,它不是共享的 – 库的代码/文本部分是共享的 – 数据部分对于使用库的每个进程是唯一的
正如我所评论的:
Levine关于连接器和装载机的书是一个有用的参考。
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
你可以通过分析你的程序来学习很多东西来获得系统调用的感觉。