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

问题描述 投票:0回答:2

我已经阅读了

gcc
手册页,但我仍然无法理解
-fpic
-fPIC
之间的区别。有人可以用非常简单明了的方式解释一下吗?


相关问题:

gcc fpic
2个回答
136
投票

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

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

35
投票

来自 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.
© www.soinside.com 2019 - 2024. All rights reserved.