खारिज नहीं कर रहा है मैं एक निष्पादन जो एक बड़ी .एक संग्रह है कि कार्यों के बहुत सारे शामिल है के लिए लिंक है खोजने के लिए। निष्पादन योग्य केवल इस संग्रह में कार्यों का एक छोटा सा अंश का उपयोग करता है, लेकिन किसी कारण से इसे से सब कुछ खींचती है और बहुत बड़ा किया जा रहा समाप्त होता है।
मेरे संदेह कार्यक्षमता निष्पादन किसी भी तरह उपयोग कर रहा है में से कुछ कुछ ऐसा नहीं होना चाहिए का संदर्भ और कहा कि सब कुछ खींचा जा करने का कारण बनता है।
यह जीसीसी मुझे बताओ कि संदर्भ का कारण बनता है एक विशिष्ट प्रतीक निष्पादन में जोड़े जाने के लिए बनाने के लिए संभव है? यह और क्यों हो सकता है?जीसीसी: कैसे क्यों एक वस्तु फ़ाइल
मैं कोई प्रभाव के साथ --gc-sections
का उपयोग कर की कोशिश की है।
मैं --version-script
का उपयोग कर कोई प्रभाव नहीं
मैं -ffunction-sections
और -fdata-sections
में कोई दिलचस्पी नहीं हूँ के साथ निष्पादन योग्य स्थानीय में सभी प्रतीकों बनाने के लिए है, क्योंकि यह है वस्तु फ़ाइलों मैं अभी नहीं करना चाहते हैं, जबकि, कार्य नहीं की कोशिश की है।
अन्य उत्तर उल्लेख -why_live
लेकिन यह है कि केवल डार्विन के लिए लागू किया जा लगते हैं और मैं linux x86_64
आप * जानते हैं * कि कार्यों आप का उपयोग पुस्तकालय में कुछ और का उपयोग नहीं करता? आपको यह पता लगाया जा सकता है कि आप एक फ़ंक्शन का उपयोग करते हैं जो एक और दो फ़ंक्शंस का उपयोग करता है जो कि अन्य चार आदि का उपयोग करता है। –
आप अनुकरण कर सकते हैं कि लिंकर कमांड लाइन पर सूचीबद्ध ऑब्जेक्ट फ़ाइलों में 'nm -g' को लागू करता है, और फिर संग्रह पुस्तकालय से निकाली गई ऑब्जेक्ट फ़ाइलें जिनके बारे में आप चिंतित हैं, और देखें कि कहां से आता है। यह दर्दनाक होगा, लेकिन किया जा सकता है। आपको परिभाषित और अपरिभाषित वैश्विक संदर्भों को जानने की आवश्यकता है। यदि सी ++ कोड है, तो यह एक छोटा सा हो सकता है (नाम लंबे होंगे, लेकिन स्ट्रिंग मिलान अभी भी मुख्य आवश्यकता है)। –