2016-12-28 4 views
0

私は99.9%の純粋なCコードとその上にわずかなObjective CレイヤーからなるCocoa Touchフレームワークを持っています。フレームワークは、mytestsymbolという名前の単一のシンボルをエクスポートするだけです。これを行うために、私はこの行を含むエクスポートされたシンボルファイルを作成します。ココアタッチフレームワークを剥がす方法

_mytestsymbol 

私は、「ビルドの設定/リンク」の「エクスポートされたシンボルファイル」のエントリにそれを追加することによって、このファイルを使用するようにリンカに伝えますXcodeでしかし

void mytestsymbol(void) 
{ 
    start_the_whole_shebang(); 
} 

、フレームワークを構築し、バイナリエディタを使用して実行可能ファイルの内容を調べるとき、私は私のCに定義されているほとんどすべてのグローバルシンボルを見ることができます:Cコードの面では

mytestsymbol次のようになりますソースはまだそこにありますが、私はそれらを公開したくありません!

私はアプリケーションを構築するとき、それは、デフォルトでは「すべてのシンボル」に設定されているのに対し、デフォルトでは、これは単なる「デバッグシンボル」に設定されていることを見ることができますXcodeでCocoaのタッチフレームワークのストリッピングオプションをチェックします。そこで、私はフレームワークの "ストリップスタイル"モードを "すべてのシンボル"に変更し、それをアーカイブしようとしました。

しかし、それはどちらも機能しません。プロジェクトをアーカイブするときに今stripは、次のエラーが返されます。

Symbols referenced by indirect symbol table entries that can't be stripped in: ... 

そして、シンボルのリストを以下に示します。これらはすべて、私のフレームワークが他のフレームワークからインポートするすべてのシンボルです。 printffopenなどのようなCランタイムからのものだけでなく、CFBundleCopyBundleURLのようなアップルのフレームワークからのものなどです。

stripはこれらのシンボルを削除しようとしているのでこのエラーが発生すると思いますが、これは私のフレームワークで必要とされているため、これはもちろん禁止されています。

それでは、どのように私は他のフレームワークからのみmytestsymbol除く)私のフレームワークによって定義されたグローバルシンボルではなく、他の輸入を取り除くためのXcodeを伝えることができますか?現在、Cocoa Touch Frameworkのストリッピングスタイルを「すべてのシンボル」に設定することはできません。私は唯一のグローバルCシンボルをストリッピングについて話している

Symbols referenced by indirect symbol table entries that can't be stripped in: ... 

注:これは、「すべてのシンボル」に設定されているときはいつでも、(Xcodeのによって呼び出される)stripは、常に次のエラーを返します。私はObjective CをCのように剥がすことはできないことを知っていますが、それは私にとっては問題ありません。私は本当にCのシンボルだけを心配しています。すべてのCグローバルを削除するにはmytestsymbolというシンボルを除いてください。

アイデア?

答えて

3

printfのような外部シンボルを参照するリロケータブルなダイナミックライブラリ(基本的にはコラボレーション)は、間接シンボルテーブルが必要なため、ストリップスタイル "すべてのシンボル"をCocoa Touch Frameworkで使用することは不可能です。 "Strip Style"が "All Symbols"に設定されていると、そこにいません。

したがって、「ストリップスタイル」は単に「非グローバルシンボル」に設定する必要があります。 "Non-Global Symbols"は、上記のコードでmytestsymbolのようなシンボルを削除しないように(実際にはグローバルシンボルなので)、実際にはストリップしているように聞こえるため、少し混乱します。したがって、「非グローバルシンボル」のストリップスタイルを使用するだけで、完全に機能します。

関連する問題