16

私は現在、非常に大きなコード ベース用の 1 つの Xcode プロジェクトを持っています。これをProject Xと呼びます。これを一連のサブ プロジェクト ( Project A、B、C )に分割しています。

これまでのところ、これらのプロジェクトはそれぞれ、単独で問題なくコンパイルされます。それらはすべて静的ライブラリを生成します。プロジェクト Bプロジェクト Cは、ビルドするためにプロジェクト Aによって生成された静的ライブラリに依存しています。

Project B および Cによって生成された静的ライブラリを必要とする別の xcode プロジェクトProject Zがあります。ここに問題があります。プロジェクト Zがリンカ フェーズに入ると、事態は一変します。プロジェクト A で最初にリンクされたコードのプロジェクト B と C のライブラリ内で、重複したシンボルが見つかりまし

私は静的ライブラリの世界にかなり慣れていないため、Project Zを進める方法や、同じProject Aライブラリにリンクするように他のプロジェクトを変更する方法がわかりません。ありえない感じです。ここでのオプションは何ですか?

編集:

一部のクライアントはどちらか一方のみを必要とするため、プロジェクト Bプロジェクト Cは別々の静的ライブラリにビルドする必要があることを明確にする必要があります。

また、OSX プラットフォームと iOS プラットフォームの両方でこのジレンマを抱えています。

プロジェクトを動的ライブラリとして構築することで、OSX でこの問題を解決できることを認識しています。ただし、これを実行したくないのですが、iOS でも同じ問題が発生します。

4

2 に答える 2

18

静的ライブラリには、他の静的ライブラリ (またはサード パーティのコード全般) を含めることはできません。スタティック ライブラリは、.o ファイルをくっつけたものです。したがって、同じ情報のコピーが複数あると、爆発します。

各静的ライブラリには、独自のコードが含まれている必要があります。最終的なアプリケーションは、必要なすべてのライブラリ (ライブラリが必要とするライブラリを含む) をリンクする役割を果たします。このようにして、リンクされた各もののコピーが 1 つだけ存在します。

于 2012-08-01T19:08:38.460 に答える
2

これは、CoacoaPodsが解決するために作成された問題のようなもののように聞こえます。これらのプロジェクトごとにポッドを定義すると、Zは、重複するシンボルを導入することなく、チェーンのすべての依存関係を判別してリンクできるはずです。

于 2012-08-01T17:22:02.340 に答える