作者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