【发布时间】:2014-03-20 17:09:55
【问题描述】:
我试图从这里 [1] 了解 Linux 中的动态库加载,并想澄清这个概念。具体来说,当动态库在 Linux 环境中的进程中加载时,它会在地址空间中的任何点加载。现在,一个库有一个代码段和一个数据段。代码段的地址在链接前没有定义,所以它是0x0000000,而对于数据段,一些数字被定义为地址。
但这里有个窍门,这个数据段的地址实际上并不是真正的地址。实际上,在加载代码段的任何位置,都会将数据段的预定义地址添加到其中。
我说的对吗?
参考文章中的另一件事。这个声明是什么意思?
但是,我们有一个约束,即共享库在每个进程中仍然必须有一个 unqiue 数据实例。虽然可以在运行时将库数据放在我们想要的任何位置,但这需要留下重定位来修补代码并通知它在哪里实际找到数据——破坏代码的始终只读属性,从而破坏可共享性。
[1]http://www.technovelty.org/linux/plt-and-got-the-key-to-code-sharing-and-dynamic-libraries.html
【问题讨论】:
-
问题是什么?
标签: c++ c linux shared-libraries