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