2013-01-23 38 views
5

के डायनामिक सेक्शन में प्रवेश को हटा रहा है मेरे पास तीसरी पार्टी लाइब्रेरी है, जिसके लिए कुछ लाइब्रेरी बी की आवश्यकता है। एक binrary है, जो स्थिर संस्करण बी साथ जुड़ा हुआ है से जुड़ा हुआ है। इसलिए बी के गतिशील संस्करण में कोई जरूरत नहीं किसी भी अधिक है।एल्फ़ फ़ाइल

मेरे नियंत्रण में नहीं है और मैं इसे पुन: संकलित नहीं कर सकता। इस प्रकार मैं एक की DYNAMIC अनुभाग से NEEDED libA प्रविष्टि को निकालना चाहते।

वहाँ objcopy या अन्य उपकरण के साथ यह करने के लिए कोई तरीका है?

+1

बाधाएं 90% या उससे अधिक हैं जो NEEDED प्रविष्टि को हटाती हैं, केवल एक अनजान प्रतीक त्रुटि उत्पन्न करती है (यदि आप भाग्यशाली हैं) या एक खराब प्रोग्राम (यदि आप इतने भाग्यशाली नहीं हैं, तो डेटा के दोहराव के कारण अद्वितीय होना चाहिए)। @Zack मैं बी के स्थिर संस्करण के खिलाफ मेरी बाइनरी लिंक आप के बजाय पुस्तकालय बी – zwol

+0

की एक गतिशील संस्करण के खिलाफ द्विआधारी फिर से लिंक करना चाहिए, ताकि वहाँ अनसुलझे प्रतीक नहीं होना चाहिए। क्या आपको अभी भी लगता है कि मुझे कोई समस्या होगी? – dimba

+0

हां। आपकी बाइनरी में केवल बी का सबसेट होता है जो बाइनरी स्वयं ही उपयोग करता है। यह भी ए के लिए पर्याप्त नहीं होने की संभावना है। बी के गतिशील संस्करण के खिलाफ लिंक करने में समस्या क्यों है? – zwol

उत्तर

1

क्या ओबजॉपी या अन्य उपकरण के साथ ऐसा करने का कोई तरीका है?

मुझे ऐसा कोई भी मौजूदा उपकरण नहीं पता जो यह कर सकता है, हालांकि elfsh हो सकता है।

यह एक सी कार्यक्रम आप क्या चाहते करने के लिए लिखने के लिए काफी तुच्छ है: libA.so की .dynamic अनुभाग निश्चित-आकार रिकॉर्ड (प्रकार ElfW(Dyn) का), .d_type == DT_NULL के साथ एक प्रवेश द्वारा समाप्त की एक टेबल है। एक विशेष DT_NEEDED प्रवेश, बस "स्लाइड" सभी प्रविष्टियों निम्नलिखित अप (entry[n+1] साथ entry[n] अधिलेखित, आदि) से छुटकारा पाने के। यह आपके .dynamic को अंत में दो DT_NULL प्रविष्टियों के साथ छोड़ देगा, लेकिन कुछ भी ध्यान नहीं देना चाहिए।

एक जटिलता है कि अगर libB.soसंस्करणीकृत प्रतीकों कि libA.so संदर्भ शामिल हैं, तो libB.so लिए अतिरिक्त संदर्भ DT_VERNEED तालिका में हो जाएगा, और ये अधिक मुश्किल से छुटकारा पाने के लिए कर रहे हैं। यदि आप VERNEED संदर्भों से छुटकारा नहीं पा रहे हैं, तो गतिशील लिंकर दावा विफल कर देगा।