小编jim*_*imw的帖子

如何从OS X二进制文件中删除Objective-C符号?

好的,我知道还有其他帖子关于你怎么不能从OS X二进制文件中实际删除Objective-C符号,因为它们对于Obj-C来说是必要的,但我的情况有点不同.

我有一个二进制文件,它是一个包.它既可以用作VST插件,也可以用作AudioUnit插件.这个想法是二进制包含所有这两种格式的入口点,你只编译一次,然后将其命名一个副本" .VST "为VST版本,而" .component "为AU版本. (这是使用JUCE框架BTW.)

问题是对于AU方面,您必须导出Obj-C类以创建Cocoa UI视图.在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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

顺便说一下,我随后能够动态注册有问题的类(使用唯一的名称),这也解决了这个问题.但是,如果我可以开始工作,我可以为现有的二进制文件部署解决方案.

cocoa objective-c vst audiounit

12
推荐指数
1
解决办法
1127
查看次数

标签 统计

audiounit ×1

cocoa ×1

objective-c ×1

vst ×1