Ich habe die gccManpage bereits gelesen , kann aber den Unterschied zwischen -fpicund immer noch nicht verstehen -fPIC. Kann es jemand auf sehr einfache und klare Weise erklären?
Verwandte Fragen:
Ich habe die gccManpage bereits gelesen , kann aber den Unterschied zwischen -fpicund immer noch nicht verstehen -fPIC. Kann es jemand auf sehr einfache und klare Weise erklären?
Verwandte Fragen:
Antworten:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Verwenden Sie -fPICoder -fpic, um positionsunabhängigen Code zu generieren. Ob positionsunabhängiger Code verwendet -fPICoder -fpicgeneriert wird, hängt vom Ziel ab. Die -fPICAuswahl funktioniert immer, kann jedoch größeren Code erzeugen als -fpic(mnenomic, um sich daran zu erinnern, dass PIC in einem größeren Fall vorliegt, sodass möglicherweise größere Codemengen erzeugt werden). Die Verwendung der -fpicOption generiert normalerweise kleineren und schnelleren Code, unterliegt jedoch plattformabhängigen Einschränkungen, z. B. der Anzahl der global sichtbaren Symbole oder der Größe des Codes. Der Linker teilt Ihnen mit, ob er beim Erstellen der gemeinsam genutzten Bibliothek passt. Im Zweifelsfall wähle ich -fPIC, weil es immer funktioniert.
-fPICund habe -fpicanscheinend den gleichen Code generiert. Es scheint, dass sie nur auf m68k, PowerPC und SPARC einen anderen Code generieren.
Aus der Gcc-Handbuchseite :
Beim Generieren von Code für gemeinsam genutzte Bibliotheken impliziert -fpic -msmall-data und -fPIC -mlarge-data.
Wo:
-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.
man gccsondern ininfo gcc, die mehr Dokumentation haben.