作者ucrxzero (RX-0)
看板C_and_CPP
标题[问题] -fPIC==VM的共享库段都各一个副本吗?
时间Mon Oct 12 20:53:56 2020
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1602507240.A.DCE.html
※ 编辑: ucrxzero (43.248.19.192 台湾), 10/12/2020 20:54:34
1F:→ Lipraxde: fPIC 是让 compiler 编译成 position-independent code 10/13 02:32
2F:→ Lipraxde: 的选项,用这个选项编译的程式码在执行的时需要做 rel 10/13 02:32
3F:→ Lipraxde: ocation,为了在不同的位置 (VM) 上执行。 10/13 02:32
4F:→ Lipraxde: Shared library 是不是会共用 PM 应该是 OS 决定的事, 10/13 02:32
5F:→ Lipraxde: PIC 对程式执行主要还是看 VM。 10/13 02:32
6F:→ ucrxzero: 可是我记得不加才要relocation ? 10/13 09:16
7F:→ ucrxzero: 感谢 10/13 09:16
8F:→ ucrxzero: 因为不加是绝对位址会有问题 10/13 09:20
9F:→ Lipraxde: 啊对,我记错了。因为是 PIC 的关系可以把 PM 映射到不 10/13 09:39
10F:→ Lipraxde: 同的 VM,两者之间应该是这样的关系。 10/13 09:39
11F:→ ucrxzero: fPIC的可以同步修改PM 10/13 10:03
12F:→ ucrxzero: 而另外一个为private的copy on write这样理解对吗 10/13 10:03
13F:→ ucrxzero: 看到计组上的对於共享库段的解释是不是套用到dPIC上? 10/13 10:04
14F:→ ucrxzero: *fPIC 10/13 10:04
15F:→ Lipraxde: PIC 可以不经修改就能在不同位置上执行,因为使用的是 10/13 10:50
16F:→ Lipraxde: 相对位置而不是绝对位置。至於计组嘛...很久没看了,也 10/13 10:50
17F:→ Lipraxde: 不太记得相关的描述 QQ 10/13 10:50
18F:→ Killercat: 「程式设计师的自我修养」我记得前几章就在讲这个...XD 10/13 11:42
19F:推 KaryuuIssen: 执行档不要编译成PIC PIC会绕道存取(got/plt等等) 10/13 12:24
20F:→ KaryuuIssen: 另外PIC旨在程式段共享 资料段还是各自有各自的 10/13 12:25
21F:→ Lipraxde: 想避免 got/plt 应该是尽量用 static link 吧? 10/13 13:23
22F:→ ucrxzero: 绕道存取我查查看 感谢 10/13 15:33
23F:推 KaryuuIssen: L大 你回答的是另一个问题: .so跟.a的抉择 这点让 10/13 16:41
24F:→ KaryuuIssen: 原PO自己考虑XD 总之fPIC除了编译Shared library外 10/13 16:42
25F:→ KaryuuIssen: 都不需要加 就算原po选了.so而没加fPIC 编出来的 10/13 16:42
26F:→ KaryuuIssen: 执行档存取Shared library的部份依然会是PIC 10/13 16:42
27F:→ Lipraxde: 恩恩,我误会您前面的意思了 10/13 18:32
28F:→ ucrxzero: 了解了感谢 10/13 21:07
29F:推 kingofsdtw: 感谢,长知识了 10/15 02:07