构建共享库时 -fPIC 是什么意思?
我知道“-fPIC
”选项与解析地址和各个模块之间的独立性有关,但我不确定它的真正含义。 你可以解释吗?
I know the '-fPIC
' option has something to do with resolving addresses and independence between individual modules, but I'm not sure what it really means. Can you explain?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
PIC 代表位置无关代码。
引用
man gcc
:在上述架构上构建共享对象 (*.so) 时使用此选项。
PIC stands for Position Independent Code.
To quote
man gcc
:Use this when building shared objects (*.so) on those mentioned architectures.
f
是“控制所使用的接口约定”选项的 gcc 前缀编辑
PIC
代表“位置无关代码”,它是 m68K 和 SPARC 的fpic
的特化。:阅读了 0x6adb015引用的文档,以及coryan的评论,我做了一些更改:
此选项仅使对于共享库来说,您告诉操作系统您正在使用全局偏移表,GOT,这意味着您的所有地址引用都是相对于 GOT 的,并且代码可以在多个进程之间共享,
否则,如果没有此选项, 加载器必须自己修改所有偏移量,我们几乎总是使用 -fpic/PIC。
不用说,
The
f
is the gcc prefix for options that "control the interface conventions usedin code generation"
The
PIC
stands for "Position Independent Code", it is a specialization of thefpic
for m68K and SPARC.Edit: After reading page 11 of the document referenced by 0x6adb015, and the comment by coryan, I made a few changes:
This option only makes sense for shared libraries and you're telling the OS you're using a Global Offset Table, GOT. This means all your address references are relative to the GOT, and the code can be shared accross multiple processes.
Otherwise, without this option, the loader would have to modify all the offsets itself.
Needless to say, we almost always use -fpic/PIC.
man gcc 说:
man gcc
says: