我有一个Cocoa Touch框架,它由99.9%纯C代码组成,只有一小部分Objective C在其上。框架应该只导出一个名为mytestsymbol
的符号。要做到这一点,我创建一个只包含此行导出的符号文件:如何剥离Cocoa Touch框架
_mytestsymbol
我再告诉链接使用此文件通过将其添加到“导出符号文件”入口“生成设置/链接”在Xcode中。
在C代码而言,mytestsymbol
看起来是这样的:
void mytestsymbol(void)
{
start_the_whole_shebang();
}
然而,构建框架时,用十六进制编辑器检查可执行文件的内容,我可以看到我的C定义的几乎所有全局符号消息来源仍然存在,但我不想公开这些消息!
在Xcode中检查Cocoa Touch框架的剥离选项时,我可以看到默认情况下这只是设置为“调试符号”,而在构建应用程序时默认设置为“所有符号”。所以我将我的框架的“Strip style”模式更改为“All symbols”,并尝试对其进行存档。
但是,这也行不通。
Symbols referenced by indirect symbol table entries that can't be stripped in: ...
然后符号列表如下:现在strip
归档项目时将返回以下错误。这些都是我的框架从其他框架导入的所有符号,例如来自C运行库的东西,如printf
,fopen
等,但也来自Apple框架如CFBundleCopyBundleURL
等。
所以我想我得到这个错误,因为strip
试图去掉这些符号,但这当然是禁止的,因为这些是我的框架所需要的。
那么我该如何告诉Xcode去掉只有由我的框架定义的全局符号(mytestsymbol
除外),而不是其他任何从其他框架导入的符号?目前,根本没有可能为Cocoa Touch Frameworks设置剥离样式为“所有符号”。每当这个设置为“所有符号”,strip
(由Xcode中调用)始终返回以下错误:
Symbols referenced by indirect symbol table entries that can't be stripped in: ...
请注意,我说的只是剥离全局C符号。我知道Objective C不能像C一样剥离,但对我来说没问题。我真的只关心C符号。我希望除去以外的所有C全局变量,除了这个符号名为mytestsymbol
。
任何想法?