gccKılavuz sayfasını zaten okudum , ancak hala -fpicve arasındaki farkı anlayamıyorum -fPIC. Birisi bunu çok basit ve net bir şekilde açıklayabilir mi?
İlgili sorular:
gccKılavuz sayfasını zaten okudum , ancak hala -fpicve arasındaki farkı anlayamıyorum -fPIC. Birisi bunu çok basit ve net bir şekilde açıklayabilir mi?
İlgili sorular:
Yanıtlar:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Konumdan bağımsız kod oluşturmak için -fPICveya kullanın -fpic. İster kullanmak -fPICveya -fpicpozisyon bağımsız kod hedef bağlıdır üretmek için. -fPICSeçim her zaman çalışır, ancak daha büyük bir kod üretebilir -fpic(bu kodun daha büyük miktarlarda üretebilir böylece PIC, daha büyük bir durumda olmasıdır hatırlamak mnenomic). -fpicSeçeneği kullanmak genellikle daha küçük ve daha hızlı kod üretir, ancak küresel olarak görünür sembollerin sayısı veya kodun boyutu gibi platforma bağlı sınırlamalara sahip olacaktır. Bağlayıcı, paylaşılan kitaplığı oluşturduğunuzda size uygun olup olmadığını söyleyecektir. Şüphe duyduğumda seçerim -fPICçünkü her zaman işe yarar.
-fPICve -fpicgörünüşe göre aynı kodu oluşturdum. Görünüşe göre sadece m68k, PowerPC ve SPARC'de farklı bir kod oluşturuyorlar.
Gönderen gcc kılavuzu sayfa :
Paylaşılan kitaplıklar için kod oluştururken -fpic, -msmall-data ve -fPIC -mlarge-data anlamına gelir.
Nerede:
-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 gccdeğilinfo gcc.