"-Fpic" ve "-fPIC" gcc parametreleri arasındaki fark nedir?


100

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:


1
Evet, cevap daha fazla dokümantasyona sahip olan içinde man gccdeğil info gcc.
user2284570

Yanıtlar:


116

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.


35
Dahası: Burada küçük bir deney yaptım (x86_64 platformunda) -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.
Denilson Sá Maia

4
Bazı hedefler için tek bir gcc sürümünün tek bir şekilde derlendiği tek bir deney. Bu sonucu bir parça tuzla alın, sonucun özellikle GCC gibi bir araçla zamanla değişmesini bekleyin.
old_timer

Bir soru sorabilir miyim; küresel olarak görünür semboller ne anlama geliyor?
Константин Ван

18

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.

1
Bağlantılı kılavuz sayfası güncellendi, kontrol etmeyi unutmayın.
youfu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.