gcc
Kılavuz sayfasını zaten okudum , ancak hala -fpic
ve arasındaki farkı anlayamıyorum -fPIC
. Birisi bunu çok basit ve net bir şekilde açıklayabilir mi?
İlgili sorular:
gcc
Kılavuz sayfasını zaten okudum , ancak hala -fpic
ve 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 -fPIC
veya kullanın -fpic
. İster kullanmak -fPIC
veya -fpic
pozisyon bağımsız kod hedef bağlıdır üretmek için. -fPIC
Seç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). -fpic
Seç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.
-fPIC
ve -fpic
gö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 gcc
değilinfo gcc
.