मैं हाल ही में, एक निश्चित साझा लाइब्रेरी (ELF) x86-64 वास्तुकला को निशाना बनाने का निर्माण किया गया था इस तरह बनाम:अंतर: 86 x86-64
g++ -o binary.so -shared --no-undefined ... -lfoo -lbar
यह निम्न त्रुटि के साथ विफल:
relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
बेशक, इसका मतलब है कि मुझे इसे स्थिति-स्वतंत्र कोड के रूप में पुनर्निर्माण करने की आवश्यकता है, इसलिए यह साझा लाइब्रेरी में जोड़ने के लिए उपयुक्त है।
लेकिन यह बिल्कुल उसी निर्माण तर्क के साथ x86 पर पूरी तरह से अच्छा काम करता है। तो सवाल यह है कि x86-64 से अलग x86 पर स्थानांतरण कैसे है और मुझे पूर्व में -fPIC
के साथ संकलन करने की आवश्यकता क्यों नहीं है?
मैंने इसे कभी नहीं समझा है। यदि संकलक आपको बता सकता है कि स्वचालित रूप से किस विकल्प का उपयोग करना है, तो यह आवश्यक है कि आप इसे सही तरीके से संचालित करने के लिए जादू शब्द कहें? Grrr .. –
@ बिली ओनेल, अब मुझे विश्वास है कि यह लीकी अबास्ट्रक्शन का मामला है। वे वैश्विक डेटा को लोड करने में भिन्न होते हैं, जो प्रभावित करता है कि पीआईसी की आवश्यकता है या नहीं। –
मैं अंतर की आवश्यकता को समझता हूं। मुझे समझ में नहीं आता है कि आपको कंपाइलर को ऐसा करने के लिए एक स्विच देने की आवश्यकता क्यों है। –