[問題] -fPIC代表VM共享庫段都各一個副本嗎?

看板C_and_CPP作者 (RX-0)時間3年前 (2020/10/12 20:54), 3年前編輯推噓3(3026)
留言29則, 5人參與, 3年前最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) gcc 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) "動態/靜態函式庫" 問題(Question): 除了標題的問題還要問: 編執行檔有沒有fPIC有差嗎? 例如: gcc -fPIC main.c -lboost_printf gcc -static -fPIC main.c -lboost_printf 假設boost_printf.so跟.a都存在 這是計組的問題但我不太了解~感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 43.248.19.192 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1602507240.A.DCE.html ※ 編輯: ucrxzero (43.248.19.192 臺灣), 10/12/2020 20:54:34

10/13 02:32, 3年前 , 1F
fPIC 是讓 compiler 編譯成 position-independent code
10/13 02:32, 1F

10/13 02:32, 3年前 , 2F
的選項,用這個選項編譯的程式碼在執行的時需要做 rel
10/13 02:32, 2F

10/13 02:32, 3年前 , 3F
ocation,為了在不同的位置 (VM) 上執行。
10/13 02:32, 3F

10/13 02:32, 3年前 , 4F
Shared library 是不是會共用 PM 應該是 OS 決定的事,
10/13 02:32, 4F

10/13 02:32, 3年前 , 5F
PIC 對程式執行主要還是看 VM。
10/13 02:32, 5F

10/13 09:16, 3年前 , 6F
可是我記得不加才要relocation ?
10/13 09:16, 6F

10/13 09:16, 3年前 , 7F
感謝
10/13 09:16, 7F

10/13 09:20, 3年前 , 8F
因為不加是絕對位址會有問題
10/13 09:20, 8F

10/13 09:39, 3年前 , 9F
啊對,我記錯了。因為是 PIC 的關係可以把 PM 映射到不
10/13 09:39, 9F

10/13 09:39, 3年前 , 10F
同的 VM,兩者之間應該是這樣的關係。
10/13 09:39, 10F

10/13 10:03, 3年前 , 11F
fPIC的可以同步修改PM
10/13 10:03, 11F

10/13 10:03, 3年前 , 12F
而另外一個為private的copy on write這樣理解對嗎
10/13 10:03, 12F

10/13 10:04, 3年前 , 13F
看到計組上的對於共享庫段的解釋是不是套用到dPIC上?
10/13 10:04, 13F

10/13 10:04, 3年前 , 14F
*fPIC
10/13 10:04, 14F

10/13 10:50, 3年前 , 15F
PIC 可以不經修改就能在不同位置上執行,因為使用的是
10/13 10:50, 15F

10/13 10:50, 3年前 , 16F
相對位置而不是絕對位置。至於計組嘛...很久沒看了,也
10/13 10:50, 16F

10/13 10:50, 3年前 , 17F
不太記得相關的描述 QQ
10/13 10:50, 17F

10/13 11:42, 3年前 , 18F
「程式設計師的自我修養」我記得前幾章就在講這個...XD
10/13 11:42, 18F

10/13 12:24, 3年前 , 19F
執行檔不要編譯成PIC PIC會繞道存取(got/plt等等)
10/13 12:24, 19F

10/13 12:25, 3年前 , 20F
另外PIC旨在程式段共享 資料段還是各自有各自的
10/13 12:25, 20F

10/13 13:23, 3年前 , 21F
想避免 got/plt 應該是盡量用 static link 吧?
10/13 13:23, 21F

10/13 15:33, 3年前 , 22F
繞道存取我查查看 感謝
10/13 15:33, 22F

10/13 16:41, 3年前 , 23F
L大 你回答的是另一個問題: .so跟.a的抉擇 這點讓
10/13 16:41, 23F

10/13 16:42, 3年前 , 24F
原PO自己考慮XD 總之fPIC除了編譯Shared library外
10/13 16:42, 24F

10/13 16:42, 3年前 , 25F
都不需要加 就算原po選了.so而沒加fPIC 編出來的
10/13 16:42, 25F

10/13 16:42, 3年前 , 26F
執行檔存取Shared library的部份依然會是PIC
10/13 16:42, 26F

10/13 18:32, 3年前 , 27F
恩恩,我誤會您前面的意思了
10/13 18:32, 27F

10/13 21:07, 3年前 , 28F
了解了感謝
10/13 21:07, 28F

10/15 02:07, 3年前 , 29F
感謝,長知識了
10/15 02:07, 29F
文章代碼(AID): #1VX57etE (C_and_CPP)