好的,我知道还有其他帖子关于您实际上不能从OS X二进制文件中删除 Objective-C 符号,因为它们是 Obj-C 工作所必需的,但我的情况有点不同。
我有一个二进制文件,它是一个捆绑包。它旨在用作 VST 插件或 AudioUnit 插件。这个想法是二进制文件包含这两种格式的所有入口点,您只需编译一次,然后将一个副本命名为“ .vst ”用于 VST 版本, “. component ”用于AU 版本。 (顺便说一句,这是使用 JUCE 框架。)
问题是对于 AU 端,您必须导出一个 Obj-C 类来创建 CocoaUI
视图。在 VST 方面,永远不会使用此类。但是如果你有一个像 Ableton Live 这样的主机,它允许你同时加载同一个插件的 AU 和 VST 版本,现在我们会遇到典型的 Obj-C 命名空间冲突问题。
在 VST 方面,那个特定的 Obj-C 类永远不会被使用。所以我想做的是使用“strip”从生成的二进制文件中剥离那些 Obj-C 类。这仍然保持了只为两种格式编译一次的优势。
无论如何,我已经尝试使用"strip -R stripfile.txt <path to binary>"
,其中 stripfile.txt 包含我想要剥离的符号,但它总是无法说在二进制文件中找不到符号。我已经尝试修改条带文件中的名称,但这没有帮助(或者我做错了)。
以下是我要剥离的相关符号,由“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
有任何想法吗?
顺便说一句,我随后能够动态注册有问题的类(使用唯一的名称),这也解决了这个问题。但是,如果我可以进行剥离工作,我可能会为现场已经存在的二进制文件部署一个解决方案。