2010-12-01 13 views
5

私はサードパーティのためにiOS静的ライブラリを使用しています。これは、大量のC++を含む他のいくつかの静的ライブラリを使用して構築され、巨大な成果物ライブラリをもたらします。iOSアプリケーションが静的ライブラリにリンクされていると、破棄されたシンボルのリストを取得するにはどうすればよいですか?

iOSライブラリへのAPIは非常に簡単で、含まれているコードをすべて実行するわけではありません。私はさまざまなライブラリから不要なモジュールを削除して最終的なサイズを下げることができます。

すべてのライブラリAPIを使用するサンプルアプリケーションがあります。リンクされると、ライブラリ内のほとんどのシンボルが破棄されます。それらのシンボルのリストを取得する方法はありますか?

答えて

0

私は時に制限が動的ライブラリを使用していることを言われてきました私はこれが働くかもしれないと思うので、コード署名プロセスによって強制されています

  1. リンクは静的ライブラリに対するあなたのサンプルアプリケーションの実行可能ファイルは
  2. トンの一覧を表示するために実行nm -ujを彼は実行可能ファイル内のシンボルを定義しなかった。ライブラリが静的にリンクされているので、唯一の未定義のシンボルが
  3. は静的ライブラリ
  4. リンクダイナミックライブラリに対するあなたのサンプルアプリケーションの実行可能ファイルの動的なバージョンを作成し、標準のiOSライブラリで定義されたものでなければなりません
  5. この実行ファイルに対してnm -ujを実行します。定義されていないシンボルは、ステップ2でリストされたシンボルと、実際に実行可能ファイルによって参照されるライブラリシンボルとの和集合です。
  6. diffステップ2とステップ5のリスト。これにより、ライブラリ内のシンボル一覧のみが表示されます
  7. オブジェクトファイルの
  8. 実行nm -js __TEXT __text
  9. がライブラリにこれは、自動化することができます6.

ステップに記載されている機能をエクスポートするだけでオブジェクト・ファイルを追加し、各オブジェクトファイルでエクスポートされた関数のリストを取得しますおそらく関数以外のシンボルを考慮するために改善する必要があるでしょう(例えばグローバル変数ベリーズ)。

関連する問題