2010-03-03 11 views
6

पर निष्पादनयोग्य से प्रतीकों निर्यात मैं खोजने कर रहा हूँ कि जब मैं एक स्थिर पुस्तकालय (ए) के खिलाफ एक निष्पादन लिंक, स्थिर पुस्तकालय से प्रतीकों अंत निष्पादन योग्य फ़ाइल से निर्यात किया जा रहा से बचना। मैं इससे बचना चाहता हूं और कुछ भी निर्यात नहीं करना चाहता हूं।लिनक्स

मैं एक संस्करण स्क्रिप्ट प्रदान करने की कोशिश की है, लेकिन यह कोई फर्क लगता है।

{ 
    global: 
     main; 
    local: 
     *; 
}; 

वहाँ एक रास्ता एक निष्पादन से प्रतीकों निर्यात नहीं करने के लिए जब एक स्थिर पुस्तकालय में जोड़ने है: मेरे संस्करण स्क्रिप्ट की सामग्री इस प्रकार हैं? मैं स्थिर पुस्तकालय को फिर से संकलित नहीं कर सकता।

उत्तर

7

निष्पादन योग्य डिफ़ॉल्ट रूप से प्रतीकों का निर्यात नहीं है, और ऐसा नहीं होगा जब तक आप -Wl, का उपयोग करें - निर्यात गतिशील। यह केवल तभी जरूरी है जब आप गतिशील रूप से पुस्तकालयों को लोड कर रहे हों, जिन्हें मुख्य निष्पादन योग्य में प्रतीकों में जोड़ने की आवश्यकता है (यह सी ++ में एक आम मामला है यदि आपके पुस्तकालयों में कक्षाएं होती हैं जो एक्सई में वर्चुअल विधियों को ओवरराइड करती हैं)

शायद आप ' डीबग प्रतीकों के साथ निर्यात प्रतीकों को भ्रमित कर रहे हैं। डीबग प्रतीक डीबगर के लाभ के लिए उत्पादित किए जाएंगे (यदि आप एक्सई को नहीं हटाते हैं), लेकिन चलाने की आवश्यकता नहीं है।

+1

ऐसा लगता है कि जीसीसी 4.8.2 (मेहराब लिनक्स पर) डिफ़ॉल्ट रूप से निर्यात कार्यकारी समारोह के नाम, घटना अगर -fvisibility = छिपा प्रयोग किया जाता है है। और केवल लिंकर को जोड़ना प्रतीक को हटा देता है। – aisbaa

3

strip का उपयोग करें?

$ man strip

+0

पट्टी, प्रतीक निर्यात निष्पादन बंद नहीं होगा, यदि वास्तव में यह होता है, क्योंकि यह केवल डिबग जानकारी बंद लेता है। – MarkR

+1

@MarkR: पट्टी के लिए आदमी पृष्ठ को पढ़ने - यह बस डिबग प्रतीकों –

+0

तुलना में बहुत अधिक निकाल सकते हैं लेकिन अगर आप वर्गों जो चलाया जा सकता है, को दूर तो द्विआधारी किसी भी अधिक स्पष्ट रूप से :) – MarkR