2010-11-14 17 views
25

मैं जितना कर सकता हूं उतना पट्टी करना चाहता हूं - लिनक्स पर: एक ईएलएफ। मैं केवल वही सामान चाहता हूं जो मुझे चलाने की ज़रूरत है।एक्जिक्यूटिव को पूरी तरह से कैसे हटाएं

मैं strip उपयोग करने की कोशिश:

strip --strip-all elf 

लेकिन यह एक अच्छा काम करने के प्रतीत नहीं होता: nm अभी भी सामान के बहुत सारे प्रदर्शित करता है, और बाइनरी अभी भी बड़ा है।

मुझे क्या करना चाहिए?

+1

आपने इसे कैसे शुरू किया? –

+0

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

उत्तर

28

यदि सब कुछ विफल हो जाता है, तो आप man strip से शुरू होने वाले दस्तावेज़ों को पढ़ सकते हैं।

गंभीरता से, शायद आपके एप्लिकेशन में बहुत सारे प्रतीकों और कोड हैं। एक चरम पर, सबसे बड़ा आकार में कमी rm elf होगी लेकिन फिर आपका प्रोग्राम अब नहीं चलेगा। यह सब पर आपके प्रोग्राम पर निर्भर करता है और आपने इसमें जो कोड किया है।

एक ठोस उदाहरण के रूप में, मैंने हाल ही में एक बड़ी सी ++ लाइब्रेरी के साथ काम किया जहां strip बिना किसी तर्क के 400 + एमबी से 28 एमबी तक आकार कम हो गया। लेकिन फिर आप इसके खिलाफ (अन्य साझा पुस्तकालयों के संदर्भ में) लिंक नहीं कर सका, इसे कुछ हद तक बेकार कर दिया।

लेकिन strip --strip-unneeded का उपयोग करते समय, यह आकार 400+ एमबी से 55 एमबी तक बदल गया जो अभी भी काफी है, फिर भी लाइब्रेरी को अन्य साझा पुस्तकालयों से एक्सेस करने की अनुमति है।

संक्षेप में, मुझे strip पर भरोसा होगा। शायद आपके आवेदन को कोड परिवर्तनों के बिना आगे कम नहीं किया जा सकता है।

12

स्ट्रिप करने के लिए -R विकल्प का उपयोग करके, आप उन सभी अनुभागों को हटा सकते हैं जिनकी आपको आवश्यकता नहीं है। कम से कम ईएलएफ निष्पादन योग्य के संबंध में this पर भी देखें।

0
strip -R .comment 
gcc -Os elf.c 

वे दोनों मदद कर सकते हैं।

7

मैं इस महान लेख को देखता हूं जो ईएलएफ को जितना संभव हो सके निष्पादन योग्य बनाने पर गहराई में जाता है। शायद यह जानकारी है जो मदद कर सकता है!

http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html