2012-01-09 7 views
5

यहां समस्या है:जीसीसी में, मैं सभी प्रतीकों को निर्यात किए बिना साझा लाइब्रेरी के लिए सभी टाइपइन्फो प्रतीकों को कैसे निर्यात कर सकता हूं?

मेरे पास एक साझा लाइब्रेरी है जो डिफ़ॉल्ट रूप से प्रतीकों को छुपा रही है। असल में, यह एक विशिष्ट फ़ाइल में कुछ प्रतीकों को निर्यात करने के लिए -Xlinker --version-script = विकल्प का उपयोग करता है लेकिन बाकी सभी को छुपाता है। मुद्दा यह है कि यदि हम अन्य साझा पुस्तकालयों में परिभाषित अपवादों को पकड़ने का प्रयास करते हैं, तो हमें समस्याएं मिलती हैं क्योंकि टाइपिफ़ो इस साझा लाइब्रेरी से छिपा हुआ है। मैं अपवाद वर्गों को स्पष्ट रूप से दृश्यमान नहीं बना सकता क्योंकि उन्हें एक ओपन सोर्स लाइब्रेरी में परिभाषित किया गया है जो मेरे नियंत्रण से बाहर है। मैं संस्करण-स्क्रिप्ट प्रतीक फ़ाइल में अपवाद वर्गों के टाइपइन्फो के लिए उलझन में नामों को स्पष्ट रूप से सूचीबद्ध नहीं करना चाहता क्योंकि इस पुस्तकालय पर काम कर रहे कई डेवलपर्स हैं और वे कुछ अपवाद वर्ग के लिए ऐसा करना भूल गए हैं भविष्य।

मैंने ओपन सोर्स से पहले #pragma जीसीसी दृश्यता पुश (डिफ़ॉल्ट) का उपयोग करने का प्रयास किया है। एचपीपी फाइलें लेकिन यह काम नहीं लग रहा था - प्रतीकों को दिखाई नहीं दे रहा था।

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

मुझे वास्तव में जो चाहिए वह एक ऐसा विकल्प है जो सभी टाइपिन्फो प्रतीकों को दिखाई देगा, जबकि अन्य प्रतीकों को छुपाएगा (जब तक कि वे स्पष्ट रूप से दिखाई नहीं दे रहे हों)। क्या इस तरह कोई विकल्प है?

+0

शायद ' एनएम 'या ऐसा कुछ? केवल अनुमान है। –

+0

यह जाने का एक अच्छा तरीका हो सकता है। मैंने इसके बारे में सोचा था और हालांकि मुझे अतिरिक्त स्क्रिप्टिंग काम पसंद नहीं है, लेकिन यह सबसे अच्छा जवाब होगा। तुम्हारे सुझाव के लिए धन्यवाद! –

उत्तर

2

आपके प्रश्न का सबसे सीधा जवाब एलडी विकल्प --dynamic-list-cpp-typeinfo का प्रयास करना है। मेरे पास उस विकल्प के साथ सबसे अच्छा भाग्य नहीं है, लेकिन वाईएमएमवी।

आप यह नहीं कहते कि आप किस प्लेटफॉर्म पर निर्माण कर रहे हैं। जाहिर है आप mingw का उपयोग कर रहे हैं, क्योंकि आपने -fvisibility-ms-compat को आजमाया है; लेकिन ऑफहैंड मौके पर कि आप वास्तव में लिनक्स जैसे ईएलएफ लक्ष्य पर हैं, अपनी संस्करण स्क्रिप्ट से वाइल्डकार्ड _ZTI* और _ZTN* प्रतीक निर्यात करने का प्रयास करें। (आप शायद विंडोज़ पर कुछ ऐसा कर सकते हैं, लेकिन विज़ुअल सी ++ नाम मैंगलिंग के रूप में वास्तव में दस्तावेज नहीं किया गया है, मैं किसी भी डिब्बाबंद वाइल्डकार्ड का उपयोग नहीं कर सकता हूं।)

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

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