MacOS 10.6, अगर मैं एक फ़ाइल "unwanted.c" जो शामिल है:कैसे वास्तव में MacOS
class secret_thing {
public:
secret_thing() {}
void revealing_method_name() {}
};
main()
{
secret_thing obj;
obj.revealing_method_name();
}
अब मुझे क्या करना:
$ g++ unwanted.c -o unwanted
$ strip unwanted
$ nm unwanted | grep secret
0000000100000eb8 T __ZN12secret_thing21revealing_method_nameEv
0000000100000eae T __ZN12secret_thingC1Ev
अगर मैं बाहर विभाजित इंटरफ़ेस और गुप्त वर्ग का कार्यान्वयन, क्योंकि अधिकांश लोग सी ++ कोड लिखते समय करते हैं, फिर छीनने वाले निष्पादन योग्य में कोई अवांछित प्रतीक नहीं होते हैं। अफसोस की बात है, मुझे कोड की कई हज़ार लाइनों का मौजूदा कोड बेस सौंपा गया है और यह मेरे विकल्पों में से एक नहीं है।
मैं -fno-RTTI की कोशिश की है, एक जंगली अनुमान के रूप में, और कहा कि कुछ भी ठीक नहीं होती। मैंने Google देवताओं से प्रार्थना की है और क्लबों को स्ट्रिप करने के कई संदर्भ पाए हैं, लेकिन कोई उपयोगी लिंक नहीं है। मैं पट्टी के लिए आदमी पृष्ठों, जी ++ और पर मैक ld स्किम्ड है, और वहाँ कोई स्पष्ट बातें की कोशिश करने के लिए गए थे, हालांकि वाक्यांश "निजी externs" पेचीदा था, मैं इस बारे में क्या करना है यह पता लगाने नहीं कर सका।
[अद्यतन] दुख की बात है, वहाँ पता चला है एक छोटा सा उदाहरण बनाने के लिए मेरे प्रयास के साथ एक समस्या हो सकता है। यहां एक और जटिल उदाहरण है, जो वास्तविक समस्या के करीब है, जो अभी भी अवांछित प्रतीक हैं यदि इसे अनुकूलित बनाया गया है।
मुझे बुरा उदाहरण के लिए हमें खेद है। सबसे छोटी वास्तविक समस्या को ढूंढना मुश्किल हो जाता है। उत्तरों के लिए बहुत धन्यवाद, हालांकि, प्रत्येक उत्तर मुझे समाधान के करीब धक्का देता है।
class base {
public:
virtual int revealing_method_name() = 0;
virtual ~base() {};
};
class secret_thing : public base {
public:
int revealing_method_name() { return 0; };
};
class other_thing : public base {
public:
int revealing_method_name() { return 1; };
};
int main(int argc, char**)
{
base *object = 0;
if(argc > 1) object = new secret_thing;
else object = new other_thing;
return object->revealing_method_name();
}
मेरे पास गलत कोड पोस्ट किया गया था। सही उदाहरण कोड के साथ, के रूप में सवाल अब पढ़ता है, वर्ग परिभाषा अंदर तरीकों के लिए कार्यान्वयन के साथ, पट्टी का कहना है: पट्टी: प्रतीकों अप्रत्यक्ष प्रतीक तालिका प्रविष्टियों द्वारा संदर्भित है कि में छीन नहीं किया जा सकता:/उपयोगकर्ताओं/माइकल। खिलौना/अवांछित __ZN12secret_thing21revealing_method_nameEv __ZN12secret_thingC1Ev – mtoy
हालांकि उत्तर काफी उपयोगी था, क्योंकि यह मुझे और अधिक Google चारा देता था, कि त्रुटि स्ट्रिंग जांच के कुछ और दिलचस्प क्षेत्रों को प्रकट करती है। – mtoy