我有一個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
。
任何想法?