作者tortoise (tortoise)
看板LinuxDev
标题[问题] 产生shared library时,有用-fPIC参数和没用的差别是什麽
时间Sat Apr 23 18:35:48 2011
通常在产生shared library时,会加-fPIC的参数,
目的是为了产生与位址无关的machine code。
这样可以达到同一份library让多份process共用的目的。
如果没有加-fPIC,其实library还是可以产生,
程式一样可以动态连结这个library,
一样可以执行无误。
那麽,有没有加-fPIC的差别到底是什麽?
是说如果没有加的话,
每一个process都会在实体记忆体都载入一份library吗?
所以就不能达到共用的目的吗?
如果查看memory map,
看到的是library在process的virtual memory的位置,
要怎样可以知道library是在实体记忆体的哪个位置?
要如何知道library是不是真的只载入一份呢?
$ cat /proc/2351/maps
...
0092c000-0092d000 r-xp 00000000 08:06 1330092 /test/pic/foo.so
0092d000-0092e000 r--p 00000000 08:06 1330092 /test/pic/foo.so
0092e000-0092f000 rw-p 00001000 08:06 1330092 /test/pic/foo.so
...
$ cat /proc/2356/maps
...
00d42000-00d43000 r-xp 00000000 08:06 1330092 /test/pic/foo.so
00d43000-00d44000 r--p 00000000 08:06 1330092 /test/pic/foo.so
00d44000-00d45000 rw-p 00001000 08:06 1330092 /test/pic/foo.so
...
谢谢回答。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 112.104.128.131
2F:→ yuskeb:上面有解释有没有使用PIC的差异 参考看看 04/24 00:30
3F:→ yuskeb:关键字GOT(GlobalOffsetTable)、none self-modifying code 04/24 00:32
4F:→ tortoise:大感谢。 04/24 12:33