के साथ निर्मित स्थैतिक पुस्तकालयों में छिपाने वाला प्रतीक मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं एक स्थिर पुस्तकालय का निर्माण कर सकता हूं जो इंटरफ़ेस को निर्यात करना चाहते हैं, इसके अलावा, अपनी सभी आंतरिक वस्तुओं और कार्यों को छुपाता है। मैं एक्सकोड (जीसीसी 4.2) के साथ प्रयोग कर रहा हूँ।एक्सकोड/जीसीसी
मैंने प्रति सी ++ कक्षाओं पर __attribute__((visibility("hidden")))
विशेषता का उपयोग किया है। मैंने फ़ाइल-स्थानीय (स्थैतिक) आदि के रूप में छोटे सहायक सी कार्यों को भी परिभाषित किया है।
हालांकि, जब मैं strings
परिणामस्वरूप .a लाइब्रेरी फ़ाइल पर चलाता हूं, तब भी रिलीज कॉन्फ़िगरेशन में संकलित होने पर भी, मुझे अभी भी नाम दिखाई देते हैं मेरे स्पष्ट रूप से छिपे हुए वर्गों के, उनके विधि नामों के साथ, यहां तक कि फ़ाइल-स्थानीय कार्यों के नाम भी वहां के चारों ओर घूमते हैं।
मैंने -fvisibility=hidden
और -fno-rtti
को जीसीसी झंडे में जोड़ा है। हालांकि इससे कुछ तारों को कम कर दिया जाता है, कक्षा के नाम, विधि नाम, और स्थैतिक कार्य नाम अभी भी सादा या उलझन-लेकिन-पढ़ने योग्य रूप में मौजूद हैं।
क्या इस सामग्री को बाइनरी में उत्सर्जित सभी आंतरिक सामग्री के स्ट्रिंग नामों के बिना कंपाइलर प्राप्त करने का कोई विश्वसनीय तरीका है? किसी भी बाहरी क्लाइंट को जोड़ने के लिए यह आवश्यक नहीं होना चाहिए।
(स्पष्टीकरण के लिए: मैं आंतरिक नामकरण के लंबवत होने के बारे में पूछ रहा हूं, बनाम शाब्दिक निर्यात बाध्यकारी ज़रूरतों के विरुद्ध। मैं विघटित हूं कि सभी आंतरिक कार्य दिखाई दे रहे हैं strings
कमांड के माध्यम से, भले ही इन प्रतीकों को औपचारिक रूप से निर्यात किया गया हो या नहीं।)
धन्यवाद।
यदि आरटीटीआई सक्षम है, तो सभी प्रकार के नामों को एम्बेड किया जा रहा है, चाहे 'type_info :: name()' काम करने के लिए। आप '-फनो-आरटीआई' के साथ पुनः संयोजित करने का प्रयास कर सकते हैं और देख सकते हैं कि इससे कोई फर्क पड़ता है या नहीं। बेशक, यदि आप कहीं भी 'dynamic_cast' का उपयोग कर रहे हैं, तो यह काम नहीं करेगा। – Thomas
संकेत के लिए धन्यवाद। कोशिश की, लेकिन सभी नाम अभी भी उलझन में हैं। –
आपको वास्तव में उत्तर देने के बारे में सोचना चाहिए क्योंकि ब्लीटर द्वारा किसी को भी कोई चालबाजी की आवश्यकता नहीं है। न केवल मेरे अधिकांश नामों को हटा दिया, बल्कि यह पुस्तकालय के आकार को बहुत कम करता है जिसे मुझे साझा करने की आवश्यकता है। –