ฉันอ่านgcc
manpage แล้ว แต่ยังไม่เข้าใจความแตกต่างระหว่าง-fpic
และ-fPIC
. ใครช่วยอธิบายด้วยวิธีที่ง่ายและชัดเจน
คำถามที่เกี่ยวข้อง:
ฉันอ่านgcc
manpage แล้ว แต่ยังไม่เข้าใจความแตกต่างระหว่าง-fpic
และ-fPIC
. ใครช่วยอธิบายด้วยวิธีที่ง่ายและชัดเจน
คำถามที่เกี่ยวข้อง:
คำตอบ:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
ใช้-fPIC
หรือ-fpic
เพื่อสร้างรหัสอิสระของตำแหน่ง จะใช้-fPIC
หรือ-fpic
สร้างรหัสอิสระตำแหน่งขึ้นอยู่กับเป้าหมาย -fPIC
เลือกที่เคยทำงาน แต่อาจผลิตรหัสขนาดใหญ่กว่า-fpic
(mnenomic จะจำนี้ก็คือว่า PIC คือในกรณีที่มีขนาดใหญ่ดังนั้นจึงอาจผลิตจำนวนขนาดใหญ่ของรหัส) การใช้-fpic
ตัวเลือกมักจะสร้างโค้ดที่เล็กกว่าและเร็วกว่า แต่จะมีข้อ จำกัด ที่ขึ้นกับแพลตฟอร์มเช่นจำนวนสัญลักษณ์ที่มองเห็นได้ทั่วโลกหรือขนาดของโค้ด ตัวเชื่อมโยงจะบอกคุณว่าเหมาะสมหรือไม่เมื่อคุณสร้างไลบรารีที่ใช้ร่วมกัน เมื่อมีข้อสงสัยฉันเลือก-fPIC
เพราะมันได้ผลเสมอ
-fPIC
และ-fpic
ดูเหมือนว่าจะสร้างรหัสเดียวกัน ดูเหมือนว่าพวกเขาสร้างรหัสที่แตกต่างกันเฉพาะบน m68k, PowerPC และ SPARC
จากหน้าคู่มือ Gcc :
เมื่อสร้างโค้ดสำหรับไลบรารีที่ใช้ร่วมกัน -fpic แสดงถึง -msmall-data และ -fPIC หมายถึง -mlarge-data
ที่ไหน:
-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
แต่info gcc
มีเอกสารประกอบเพิ่มเติม