`-Fpic` और` -fPIC` gcc मापदंडों के बीच अंतर क्या है?


96

मैंने पहले ही gccमैनपेज पढ़ लिया है , लेकिन मैं अभी भी -fpicऔर इसके बीच के अंतर को नहीं समझ सकता -fPIC। क्या कोई इसे सरल और स्पष्ट तरीके से समझा सकता है?


संबंधित सवाल:


1
हां इसका उत्तर नहीं है, man gccलेकिन info gccइसमें अधिक दस्तावेज हैं।
user2284570

जवाबों:


110

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

स्थिति स्वतंत्र कोड का उपयोग -fPICया -fpicउत्पन्न करने के लिए। स्थिति का उपयोग -fPICया -fpicउत्पन्न करने के लिए स्वतंत्र कोड लक्ष्य-निर्भर है। -fPICविकल्प हमेशा काम करता है, लेकिन से भी बड़ा कोड का उत्पादन हो सकता -fpicहै (यह है कि पीआईसी, एक बड़ा मामले में है, इसलिए यह कोड की बड़ी मात्रा में उत्पादन हो सकता है है याद करने के लिए mnenomic)। -fpicविकल्प का उपयोग करना आमतौर पर छोटे और तेज कोड उत्पन्न करता है, लेकिन इसमें प्लेटफ़ॉर्म-निर्भर सीमाएँ होंगी, जैसे कि विश्व स्तर पर दिखाई देने वाले प्रतीकों की संख्या या कोड का आकार। लिंकर आपको बताएगा कि क्या आप साझा पुस्तकालय बनाते समय फिट बैठता है। जब संदेह में, मैं चुनता हूं -fPIC, क्योंकि यह हमेशा काम करता है।


33
और क्या है: मैंने यहाँ (x86_64 प्लेटफ़ॉर्म पर) एक छोटा सा प्रयोग किया, -fPICऔर -fpicएक ही कोड उत्पन्न किया है। ऐसा लगता है कि वे केवल m68k, PowerPC और SPARC पर एक अलग कोड उत्पन्न करते हैं।
डेनिलसन सा मैया

4
कुछ लक्ष्य के लिए एक तरीके से संकलित जीसीसी के एक संस्करण के साथ एक एकल प्रयोग। उस परिणाम को नमक के एक दाने के साथ लें, अपेक्षा करें कि परिणाम समय के साथ जीसीसी जैसे उपकरण के साथ बदल जाए।
ओल्ड_टाइमर

क्या मैं एक सवाल पूछ सकता हूँ; विश्व स्तर पर दिखाई देने वाले प्रतीकों का क्या मतलब है?
Константин Ван

17

से जीसीसी मैनुअल पृष्ठ :

साझा पुस्तकालयों के लिए कोड बनाते समय -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.

1
लिंक किए गए मैनुअल पेज को अपडेट कर दिया गया है, याद रखें कि देखें।
Youfu
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.