Przeczytałem już stronę gcc
podręcznika, ale nadal nie rozumiem różnicy między -fpic
i -fPIC
. Czy ktoś może to wyjaśnić w bardzo prosty i jasny sposób?
Powiązane pytania:
Przeczytałem już stronę gcc
podręcznika, ale nadal nie rozumiem różnicy między -fpic
i -fPIC
. Czy ktoś może to wyjaśnić w bardzo prosty i jasny sposób?
Powiązane pytania:
man gcc
ale winfo gcc
, które mają więcej dokumentacji.Odpowiedzi:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Użyj
-fPIC
lub,-fpic
aby wygenerować kod niezależny od pozycji. To, czy użyć,-fPIC
czy-fpic
wygenerować kod niezależny od pozycji, zależy od celu.-fPIC
Wybór zawsze działa, ale może wytwarzać większy niż kod-fpic
(mnenomic do zapamiętania jest to, że PIC jest w większej sprawy, więc może produkować większe ilości kodu). Korzystanie z-fpic
opcji zwykle generuje mniejszy i szybszy kod, ale będzie mieć ograniczenia zależne od platformy, takie jak liczba globalnie widocznych symboli lub rozmiar kodu. Linker powie Ci, czy pasuje, kiedy tworzysz udostępnioną bibliotekę. W razie wątpliwości wybieram-fPIC
, bo to zawsze działa.źródło
-fPIC
i-fpic
wydaje się, że wygenerowałem ten sam kod. Wygląda na to, że generują inny kod tylko na m68k, PowerPC i SPARC.Ze strony podręcznika Gcc :
Gdzie:
-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.
źródło