1

リンク中に静的ライブラリにすべてのオブジェクト ファイルを強制的にロードできることはわかっています。これは、目的の c カテゴリを静的ライブラリに含めるなど、さまざまな目的で使用されます。

私の質問は、プロジェクトが -ObjC または -all_load フラグを使用しているときに、ライブラリがすべてのオブジェクト ファイルをロードしないように強制することは可能ですか?

一部のヘッダーのインポートを制御するためにいくつかの clang 機能 (特に __has_include ディレクティブ) を使用していますが、-ObjC フラグが使用されている場合、このディレクティブは効果がなく、すべてのオブジェクト ファイルが読み込まれるため、ライブラリが正しく動作しません。

この問題を解決または回避する方法はありますか?

よろしく、

4

1 に答える 1

2
Is there any way to solve or workaround this problem?

はい、しかし、それは壊れやすく、エラーが発生しやすいため、おそらく価値がありません。静的ライブラリ {y,ies} の部分的なリンケージを必要としないようにコードをリファクタリングする方がおそらく簡単でしょう。

ロードする必要がある各シンボルへのハード参照がある場合、リンカーはシンボルを解決し、最終的な実行可能ファイルにリンクします。

ただし、これはサポートまたは推奨されるパターンではないため、コード内の一部のシンボルを直接参照する方法がない場合があります。同様に、カテゴリ全体を表すシンボルもないようです。カテゴリに含まれるすべてのメソッドを個別に参照する必要がある場合があります。

nmコマンド ライン ツール を参照してください。nm -m libraryライブラリ内に含まれるすべてのシンボル情報をダンプします。

于 2013-03-27T15:46:16.700 に答える