2010-01-07 6 views
8

मेरे लिनक्स सिस्टम (फेडोरा 9) पर सभी मानक साझा लाइब्रेरी ELFOSABI_NONE (0) को उनके ओएसएबीआई के रूप में निर्दिष्ट करते हैं।साझा लाइब्रेरी का ईएलएफ हेडर क्यों लिनक्स को ओएसएबीआई के रूप में निर्दिष्ट करेगा?

यह ठीक है - हालांकि मुझे एक आपूर्तिकर्ता से एक साझा लाइब्रेरी मिली है जहां ईएलएबी हेडर में दिया गया ओएसएबीआई ELFOSABI_LINUX (3) है।

यह नहीं ध्वनि एक Linux सिस्टम के लिए लक्षित एक साझा पुस्तकालय के लिए एक अनुचित मूल्य की तरह, लेकिन यह सब मेरे अन्य पुस्तकालयों की है कि एक अलग मूल्य है करता है - और इसलिए जब मैं के साथ इस पुस्तकालय को खोलने के लिए, कोशिश dlopen(), मेरे अन्य पुस्तकालयों में से एक यह त्रुटि "ईएलएफ फ़ाइल ओएस एबीआई अमान्य" में विफल रहता है।

मैं FreeBSD उपयोगिता brandelf.c अप संकलित और इसका इस्तेमाल करने के लिए 0 OSABI प्रकार बदलने के लिए और अब पुस्तकालय और सब कुछ के साथ ठीक खेलने के लिए लगता है।

मैं बस सोच रहा हूं - आपको क्यों लगता है कि यह पुस्तकालय ELFOSABI_LINUX के रूप में चिह्नित है? मैं अनुमान लगा रहा हूं कि वे किसी अन्य सिस्टम पर संकलित हो गए हैं और कुछ जीसीसी ध्वज निर्दिष्ट किए हैं जिससे इस मान को ईएलएफ हेडर में सेट किया जा सकता है? मैंने कुछ ऐसा हासिल करने की कोशिश की लेकिन उचित जीसीसी ध्वज या ध्वज निर्धारित नहीं कर सका।

मुझे यह जानना है कि संभावित कारण क्या है क्योंकि यह विशेष सप्लायर बहुत सारे हाथों के बिना कुछ भी नहीं कर सकता है और मैं यह कहने में सक्षम होना चाहता हूं कि "आप शायद एक्स कर रहे हैं लेकिन इसका मतलब है कि हमारे पास है उनके पुस्तकालयों को संशोधित करने के बाद हम उन्हें वितरित करने के लिए "।

उत्तर

4

संभवतः विक्रेता फ्रीबीएसडी पर संकलन पार कर रहा है या हाल ही में फेडोरा सिस्टम का उपयोग कर रहा है जहां STT_GNU_IFUNC का उपयोग करने वाली कुछ भी ELFOSABI_LINUX के रूप में चिह्नित की जाएगी। यदि आप इसे लिनक्स पर इस्तेमाल करने की कोशिश कर रहे हैं तो इसे ELFOSABI_NONE में बदलने के साथ कोई समस्या नहीं होनी चाहिए जैसा आपने किया है।

संबंधित मुद्दे