Хорошо, я знаю, что были другие сообщения о том, как вы не можете на самом деле вырезать символы Objective-C из двоичного файла OS X, потому что они необходимы для работы Obj-C вообще, но мой случай немного отличается.
У меня есть один бинарный файл, который является пакетом. Он предназначен для использования в качестве плагина VST или плагина AudioUnit. Идея состоит в том, что двоичный файл содержит все точки входа для обоих форматов, и вы просто компилируете его один раз, а затем называете одну копию ".vst" для версии VST и ". компонент" для версии AU. (Это использует интерфейс JUCE BTW.)
Проблема в том, что для стороны AU вы должны экспортировать класс Obj-C для создания представления Cocoa UI
. На стороне VST этот класс никогда не будет использоваться. Но если у вас есть хост Ableton Live, который позволяет одновременно загружать версии AU и VST одного и того же плагина, теперь мы сталкиваемся с типичной проблемой столкновения пространства имен Obj-C.
На стороне VST этот конкретный класс Obj-C никогда не будет использоваться. Так что я хотел бы сделать это, чтобы разбить эти классы Obj-C из результирующего бинарного файла, используя "strip". Это все еще сохраняет преимущество просто компиляции всего один раз для обоих форматов.
Во всяком случае, я пробовал использовать "strip -R stripfile.txt <path to binary>"
, где stripfile.txt содержит символы, которые я хочу разбить, но он всегда терпит неудачу, говоря, что символы не могут быть найдены в двоичном формате. Я пробовал манипулировать именами в файле strip, но это не помогает (или я делаю это неправильно).
Вот соответствующие символы, которые я хочу разбить, как вывод с помощью "nm -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
Любые идеи?
Кстати, я впоследствии смог динамически зарегистрировать рассматриваемый класс (используя уникальное имя), что также решает проблему. Однако, если бы я мог работать с лентой, я мог бы потенциально развернуть решение для уже существующих двоичных файлов в поле.