-fpic和gf参数有什么区别?


96

我已经阅读了gcc手册页,但我还是不明白之间的差别-fpic-fPIC。有人可以用非常简单明了的方式解释它吗?


相关问题:


1
是的,答案不在中,man gcc而是在中info gcc,该文档具有更多文档。
user2284570 2014年

Answers:


109

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

使用-fPIC-fpic生成与位置无关的代码。使用-fPIC还是-fpic生成位置无关的代码取决于目标。该-fPIC选择总是工作,但可能会产生较大的代码比-fpic(mnenomic要记住这是一个PIC是在一个较大的情况下,因此可能产生大量的代码)。using -fpic选项通常会生成更小,更快的代码,但是会有平台相关的限制,例如全局可见符号的数量或代码的大小。创建共享库时,链接器将告诉您是否适合。如有疑问,我选择-fPIC,因为它始终有效。


33
更重要的是:我做了一个小实验在这里(在x86_64平台),-fPIC-fpic似乎已产生相同的代码。看来它们仅在m68k,PowerPC和SPARC上生成不同的代码。
DenilsonSáMaia

3
一个gcc版本以某种方式针对某个目标进行编译的单个实验。用一粒盐得出该结果,并期望该结果随时间变化,尤其是使用GCC之类的工具时。
old_timer

我可以问个问题吗; 是什么全局可见的符号是什么意思?
КонстантинВан

17

Gcc手册页

为共享库生成代码时,-fpic表示-msmall-data,-fPIC表示-mlarge-data。

哪里:

 -msmall-data
 -mlarge-data
       When -mexplicit-relocs is in effect, static data is accessed via
       gp-relative relocations.  When -msmall-data is used, objects 8
       bytes long or smaller are placed in a small data area (the
       ".sdata" and ".sbss" sections) and are accessed via 16-bit
       relocations off of the $gp register.  This limits the size of the
       small data area to 64KB, but allows the variables to be directly
       accessed via a single instruction.

       The default is -mlarge-data.  With this option the data area is
       limited to just below 2GB.  Programs that require more than 2GB
       of data must use "malloc" or "mmap" to allocate the data in the
       heap instead of in the program's data segment.

       When generating code for shared libraries, -fpic implies
       -msmall-data and -fPIC implies -mlarge-data.

链接的手册页已更新,请记得退房。
youfu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.