Briefly, when the linker creates a shared library, it does not know in advance where it might be loaded. This creates a problems for the data and code references within the library, which should be somehow make to point to the correct memory locations.

There are two approaches to solve this problem in Linux ELF shared libraries:

If I have time then, I will try to translate those two articles into Chinese.