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

我已经阅读了-fpic页,但我仍然不明白-fpic-fPIC之间的区别。 有人可以用简单明了的方式来解释吗?


相关问题:

  • 构build共享库时,-fPIC意味着什么?
  • 如果在可执行文件中使用gcc -fPIC标志来编译对象,会产生什么影响?

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

使用-fPIC-fpic来生成与位置无关的代码。 是否使用-fPIC-fpic生成位置无关的代码是与目标相关的。 -fPICselect始终有效,但可能会产生比-fpic更大的代码(无法记住这是因为PIC处于较大的情况,所以它可能会产生大量的代码)。 使用-fpic选项通常会生成更小更快的代码,但是会有平台相关的限制,例如全局可见符号的数量或代码的大小。 链接器会告诉你在创build共享库时是否适合。 如果有疑问,我select-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.