`-fpic`和`-fPIC` gcc参数有什么区别?

我已经阅读了
gcc
手册页,但我仍然无法理解
-fpic
-fPIC
之间的区别。有人可以用一种非常简单明了的方式解释它吗? 相关问题: -fPIC在构建共享库时意味着什么? 如果在可执行文件中使用了gcc -fPIC标志,那么用于编译对象的含义是什么呢?     
已邀请:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html 使用
-fPIC
-fpic
生成与位置无关的代码。是否使用
-fPIC
-fpic
生成与位置无关的代码取决于目标。
-fPIC
选项总是有效,但可能产生比
-fpic
更大的代码(为了记住这是一个更大的情况,因此它可能产生更大量的代码)。使用
-fpic
选项通常会生成更小更快的代码,但会有与平台相关的限制,例如全局可见符号的数量或代码的大小。链接器将在您创建共享库时告诉您它是否适合。如有疑问,我选择
-fPIC
,因为它总是有效。     
从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.
    

要回复问题请先登录注册