2010-08-25 14 views
13

मैं सी ++ दृश्यता विशेषता के बारे में एक प्रश्न है। मैंने http://gcc.gnu.org/wiki/Visibility पढ़ा है और फिर भी मुझे समझ में नहीं आता कि यह कैसे काम करता है।सी ++ -fvisibility = छिपा -fvisibility-inlines-छिपा

मैं दृश्यता का उपयोग अपने साझा पुस्तकालयों मेरे पास से कुछ पर छिपा हो करना चाहते हैं। मेरा मानना ​​है कि इसका मतलब है कि प्रतीक छिपे हुए हैं?

कैसे आप तो साझा लाइब्रेरी लिंक के लिए होती हैं? क्या कोई विशेष तरीका है? अगर मैं इसे लिंक करता हूं तो यह सामान्य रूप से कैसे जुड़ा हुआ है यह काम नहीं करता है।

कोई मेरी मदद कर सकते हैं।

उत्तर

23

-fvisibility=hidden डिफ़ॉल्ट रूप से द्वारा आपके सभी प्रतीकों को छिपा बनाता है।

आपको तब क्या करना है, यह चुनना है कि आप कौन सी फ़ंक्शंस को अपनी लाइब्रेरी से लिंक करने वाले उपयोगकर्ताओं को दिखाना चाहते हैं और उन्हें दृश्यमान विशेषता के साथ चिह्नित करके उन्हें दृश्यमान बना सकते हैं।

उदा।

void __attribute__((visibility("default"))) Exported() 
{ 
    // ... 
} 
+0

धन्यवाद। वास्तव में मदद की। – nixgadgets

+2

और स्वाभाविक रूप से आप 'MYLIB_PUBLIC' या इस क्लीनर को बनाने के समान कुछ मैक्रो बनाना चाहते हैं। –

3

यह ध्यान में रखते हुए अनावश्यक प्रतीक जानकारी है कि साझा वस्तुओं के लिए निजी है कम कर देता है।

एक साझा ऑब्जेक्ट पर विचार करें जिसमें 10,000 से अधिक प्रतीकों (फ़ंक्शंस/ग्लोबल वेरिएबल्स) हैं, लेकिन उनमें से केवल 100 लाइब्रेरी उपयोगकर्ताओं से सार्वजनिक कार्य उपलब्ध हैं। हम दूसरों के लिए दृश्यमान केवल 100 कार्य कर सकते हैं & शेष 9, 9 00 प्रतीकों को निजी के रूप में।

यह है, साथ ही वस्तु के आकार साझा कम हो जाएगा, क्योंकि यह एक स्थान परिवर्तन तालिका केवल 100 प्रतीक जानकारी उपलब्ध होगी। इस ध्वज का उपयोग के साथ -फंक्शन-सेक्शन -फडाटा-सेक्शन उस 100 प्रतीकों के लिए प्रासंगिक परिभाषा के द्वारा साझा ऑब्जेक्ट आकार को और कम कर देगा।

संबंधित मुद्दे