ऑब्जेक्ट फ़ाइल में कोड को संकलित करने के लिए स्थिति-स्वतंत्र होने की आवश्यकता है यदि ऑब्जेक्ट फ़ाइल को साझा लाइब्रेरी (.so
) के रूप में लोड करने का इरादा है, क्योंकि मूल ऑब्जेक्ट फ़ाइल को साझा ऑब्जेक्ट फ़ाइल को विभिन्न प्रक्रियाओं में लोड किया जा सकता है विभिन्न।क्या 32 बिट x86 कोड साझा लाइब्रेरी फ़ाइलों के लिए विशेष रूप से पीआईसी-संकलित होना चाहिए?
अब मैं, त्रुटियों का सामना नहीं किया था जब मैं एक .so
फ़ाइल संकलित और 32 बिट x86 कंप्यूटर पर -fpic
जीसीसी विकल्प के बिना जुड़ा हुआ लोड करने का प्रयास करते हुए इसे 64 बिट बिट x86 कंप्यूटर पर विफल रहता है।
रैंडम वेबसाइटों मैंने पाया कहना है कि मैं क्योंकि कोड X86 32 बिट ABI भी जब एक स्थिति के मामले में स्वतंत्र तरीके से इस्तेमाल के अनुसार संयोग से -fpic
काम करता है बिना संकलित 32 बिट पर -fpic
जरूरत नहीं है। लेकिन मुझे अभी भी सॉफ़्टवेयर मिला है जो पुस्तकालयों के अलग-अलग संस्करणों के साथ अपने 32 बिट संस्करणों में शिप करता है: एक पीआईसी के लिए, और गैर-पीआईसी के लिए एक। उदाहरण के लिए, libirc.a
और libirc_pic.a
के साथ इंटेल कंपाइलर जहाजों को बाद में स्थिति-स्वतंत्र मोड के लिए संकलित किया जा रहा है (यदि कोई .a
फ़ाइल को .so
फ़ाइल में लिंक करना चाहता है)।
मुझे आश्चर्य है कि क्या -fpic
का उपयोग करने और नहीं यह 32 बिट कोड के लिए है का उपयोग कर, और क्यों कुछ संकुल, इंटेल संकलक की तरह बीच सटीक अंतर है, अभी भी पुस्तकालयों में से अलग-अलग संस्करण के साथ जहाज?
क्या आपने टीएलएस का उपयोग कर कोड के गैर-भौतिक संकलन को आजमाया था? या ओवरलैपिंग मेमोरी श्रेणियों के साथ कई गैर-तस्वीर पुस्तकालयों को लोड करें? अलग स्थैतिक libs कार्यक्रमों में स्थिर रूप से लिंक करने के लिए हैं (libirc.a; कोई तस्वीर थोड़ा तेज है) और .so पुस्तकालयों में स्थिर रूप से (_pic.a संस्करण)। – osgx
देखें http://stackoverflow.com/questions/3146744/difference-in-position-independent-code-x86-vs-x86-64 – AProgrammer