gcc fpic

¿Cuál es la diferencia entre los parámetros `-fpic` y`-fPIC` gcc?



(2)

Desde la página del manual de Gcc :

Al generar código para bibliotecas compartidas, -fpic implica -msmall-data y -fPIC implica -mlarge-data.

Dónde:

-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.

Ya leí la página de manual de gcc , pero todavía no puedo entender la diferencia entre -fpic y -fPIC . ¿Alguien puede explicarlo, de una manera muy simple y clara?

Preguntas relacionadas:


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

Use -fPIC o -fpic para generar código independiente de posición. Si se usa -fPIC o -fpic para generar código independiente de posición depende del objetivo. La opción -fPIC siempre funciona, pero puede producir un código más grande que -fpic (mínimo para recordar que el PIC está en un caso más grande, por lo que puede producir cantidades mayores de código). El uso de la opción -fpic generalmente genera un código más pequeño y más rápido, pero tendrá limitaciones dependientes de la plataforma, como el número de símbolos globalmente visibles o el tamaño del código. El vinculador le dirá si se ajusta cuando crea la biblioteca compartida. En caso de duda, elijo -fPIC , porque siempre funciona.