2012-08-27 17 views
7

私は少しのジレンマを持っています。私は自分のプロジェクトに2つのフレームワークを追加したので、両方ともJSONKitを使用しています。だから私は私のプロジェクトをコンパイルするときに、私はこれらの2つのフレームワークの間で重複するシンボルを取得します。サードパーティのフレームワーク間で重複するシンボルを避ける方法

ビルド設定に-ObjC -all_loadを追加する必要がありました。それ以外の場合は、コンパイルされていないカテゴリによってランタイムエラー(クラッシュ)が発生します。

アイデア?

+1

ソースを取得している場合は、JSONKitを自分自身で組み込み、フレームワークソースから削除するように編集してください。静的ライブラリを取得している場合は、メンテナーに書き込み、JSONKitとの弱いリンクを伝え、フレームワークを使用するための要件にしてください(これはどうしたらよいでしょうか)。 –

+1

これは大きな問題です。彼らはそれが衝突することを知っているので、私は意図的に他の必要なサードパーティを欠いているライブラリを見てきました。 -ObjC -all_loadを使用している場合は、実際の.aファイルを使用していると仮定しています。おそらく、そのライブラリのないバージョンの作家をリクエストすることができます。 – rooster117

+0

ええ、これは解決策になると思っていました。この一連の問題を避ける方が簡単だったと思います。 – MrShoot

答えて

2

static-libraryをリンクすると、リンカはすべてのシンボルを最終的なバイナリに埋め込みます。 (そのため、という名前のスタティックです。)実際には、ソースシンボルと新しく埋め込まれたシンボルには違いがないので、特定のシンボルを取り除く良い方法はありません。重複シンボルを取り除くこともできますが、重複シンボルは同じバージョンであることは誰も確信できません。 1つのライブラリでJSONKitライブラリの修正版を使用した場合、他のバージョンに置き換えるとライブラリが破損します。

唯一の方法は、.aに重複したシンボルがないか、ソースを取得して自分でコンパイルすることです。 libの作成者がばかではない場合、埋め込み記号のないライブラリのいくつかのバージョンを提供する必要があります。そのようなものがない場合は、そのlibを使用しないことを強くお勧めします。それは本当の初心者によって作られたことを意味するシンボルの衝突の心配がないので、それは問題がいっぱいです。

関連する問題