ठीक है, मुझे पता है कि आप वास्तव में ओएस एक्स बाइनरी से उद्देश्य-सी प्रतीकों को कैसे रोक नहीं सकते हैं, इस बारे में अन्य पोस्ट हैं क्योंकि वे ओब्जे-सी के लिए बिल्कुल काम करने के लिए जरूरी हैं, लेकिन मेरा मामला थोड़ा सा है विभिन्न।ओएस एक्स बाइनरी से उद्देश्य-सी प्रतीकों को कैसे पट्टी करें?
मेरे पास एक एकल बाइनरी है जो एक बंडल है। इसका उद्देश्य या तो एक वीएसटी प्लगइन, या ऑडियोयूनिट प्लगइन के रूप में उपयोग किया जाना है। विचार यह है कि बाइनरी में दोनों प्रारूपों के लिए सभी प्रविष्टि बिंदु शामिल हैं, और आप इसे एक बार संकलित करते हैं, और उसके बाद एक प्रतिलिपि को VST संस्करण के लिए ".vst" और ".component" एयू संस्करण के लिए । (यह Juce ढांचे BTW उपयोग कर रहा है।)
समस्या यह है कि ए.यू. पक्ष के लिए, आप कोको UI
दृश्य बनाने की एक Obj सी वर्ग निर्यात करना होगा है। वीएसटी पक्ष पर, इस वर्ग का कभी भी उपयोग नहीं किया जाएगा। लेकिन अगर आपके पास एबलेटन लाइव जैसे होस्ट हैं जो आपको एक ही प्लगइन के एयू और वीएसटी संस्करणों को एक साथ लोड करने की अनुमति देता है, तो अब हम सामान्य ओबीजे-सी नेमस्पेस टकराव मुद्दे में भाग लेते हैं।
वीएसटी पक्ष पर, उस विशेष ओबीजे-सी कक्षा का कभी भी उपयोग नहीं किया जाएगा। तो मैं क्या करना चाहता हूं कि "स्ट्रिप" का उपयोग करके परिणामस्वरूप बाइनरी से उन ओब्जे-सी कक्षाओं को पट्टी करना पड़े। यह अभी भी दोनों प्रारूपों के लिए सब कुछ संकलित करने का लाभ बनाए रखता है।
वैसे भी, मैंने "strip -R stripfile.txt <path to binary>"
का उपयोग करने का प्रयास किया है, जहां stripfile.txt में वे प्रतीक हैं जिन्हें मैं पट्टी करना चाहता हूं, लेकिन यह हमेशा यह कहने में विफल रहता है कि प्रतीक बाइनरी में नहीं मिल सकते हैं। मैंने स्ट्रिप फ़ाइल में नामों को उलझाने की कोशिश की है, लेकिन इससे मदद नहीं मिलती है (या मैं इसे गलत कर रहा हूं)।
यहाँ, प्रासंगिक प्रतीक है कि मैं उन्हें हटाना चाहते हैं "एनएम -m" द्वारा आउटपुट के रूप में:
000000000003bb00 (__TEXT,__text) non-external -[JuceDemoProjectAU description]
000000000003bb60 (__TEXT,__text) non-external -[JuceDemoProjectAU interfaceVersion]
000000000003ba00 (__TEXT,__text) non-external -[JuceDemoProjectAU uiViewForAudioUnit:withSize:]
0000000000b02398 (__DATA,__objc_data) external _OBJC_CLASS_$_JuceDemoProjectAU
0000000000b023c0 (__DATA,__objc_data) external _OBJC_METACLASS_$_JuceDemoProjectAU
कोई भी विचार?
बीटीडब्लू, मैं बाद में गतिशील रूप से कक्षा में प्रश्न (एक अद्वितीय नाम का उपयोग करके) को पंजीकृत करने में सक्षम हूं, जो समस्या को हल करता है। हालांकि, अगर मैं स्ट्रिप काम कर सकता हूं, तो मैं संभावित रूप से क्षेत्र में मौजूदा मौजूदा बाइनरी के लिए समाधान तैनात कर सकता हूं।
बस संकलित न करें और उन्हें पहले स्थान पर एयू/वीएसटी में लिंक न करें - इसके बजाय कई लक्ष्य सेट करें। – justin
मुझे पता है कि मैं ऐसा कर सकता हूं, और वास्तव में जैसा कि मैंने पहले ही उल्लेख किया है कि मैं इसे कक्षा में गतिशील रूप से पंजीकृत करने के माध्यम से काम कर रहा हूं, जो कि अच्छा है क्योंकि यह अभी भी एक बार सबकुछ संकलित करने और अलग-अलग लक्ष्य/द्विआधारी नहीं होने की अनुमति देता है - परिणामस्वरूप बाइनरी अभी भी एक एयू या वीएसटी के रूप में उपयोग किया जा सकता है (यह नहीं कर सकता है कि यह compt-compile-it-for-VST दृष्टिकोण के माध्यम से नहीं कर सकता)। मैं अभी भी उत्सुक हूं यदि मौजूदा बाइनरी से ओब्जे-सी बाइनरी को पट्टी करने का कोई तरीका है, क्योंकि यह मेरे "बेहतर" फिक्स जहाज के लिए तैयार होने से पहले मौजूदा क्षेत्र में मौजूदा सुधार को ठीक करने की अनुमति देगा। – jimw
प्रतीकों को हटाने से वर्ग संरचनाओं को नहीं हटाया जाएगा, इसलिए शायद यह वर्ग को लोड होने से नहीं रोकेगा (मुझे नहीं पता कि रनटाइम कक्षाओं को कैसे पाता है, लेकिन खोज प्रतीक केवल आरक्षित अनुभाग से देखकर कठिन होगा कक्षा की जानकारी के लिए)। आप बाइनरी में कक्षा का नाम बदलने की कोशिश कर सकते हैं, लेकिन सावधान रहना होगा कि आप किसी और चीज को प्रभावित नहीं करते हैं। मैं जस्टिन से सहमत हूं कि दो बार संकलित करना सबसे अच्छा विकल्प है, क्योंकि यह गतिशील पंजीकरण से आसान है। – ughoavgfhw