[問題] 產生shared library時,有用-fPIC參數ꤠ…

看板C_and_CPP作者 (tortoise)時間14年前 (2011/04/23 18:53), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串1/1
※ [本文轉錄自 LinuxDev 看板 #1Digk69n ] 作者: 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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.128.131

04/23 20:00, , 1F
我覺得可以參考 z-3-16-4 有前輩講得很清楚
04/23 20:00, 1F

04/23 21:06, , 2F
可以讓.text被共用
04/23 21:06, 2F

04/24 15:13, , 3F
謝謝回答
04/24 15:13, 3F
文章代碼(AID): #1Dig-fz6 (C_and_CPP)