好的,我知道有其他帖子提到过无法从OS X二进制文件中删除Objective-C符号,因为它们对Obj-C的工作是必要的,但我的情况有点不同。
我有一个单独的二进制文件,它是一个捆绑包。它旨在用作VST插件或AudioUnit插件。想法是二进制文件包含两种格式的所有入口点,您只需编译一次,然后将一个副本命名为".vst"以获取VST版本,".component"以获取AU版本。 (顺便说一句,这是使用JUCE框架实现的。)
问题是,在AU方面,您必须导出一个Obj-C类来创建Cocoa UI
视图。在VST方面,此类永远不会被使用。但是,如果您像Ableton Live这样的主机允许同时加载相同插件的AU和VST版本,那么我们现在遇到了典型的Obj-C命名空间冲突问题。
无论如何,我尝试使用“strip -R stripfile.txt ”,其中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
任何想法吗?
顺便说一下,我后来成功地能够动态注册相关类(使用唯一名称),这也解决了问题。但是,如果我能让strip工作,我有可能为已经存在于现场的二进制文件部署一个解决方案。