3

そのため、過去に静的ライブラリを数回ネストしましたが、これが好きではなく、少し問題が発生しています。

ここでは、A、B、C の 3 つの静的ライブラリがあり、それらを次のように使用する 1 つのプロジェクトがあるとします。

A は、一般的に使用されるカスタム ビュー、データ構造、およびカテゴリで構成されるベース ライブラリです。B は、複数のプロジェクト間で共有されるビュー コントローラーを含む A にリンクされたライブラリです。C は、複数のプロジェクト間で共有されるビュー コントローラーを含む、A にリンクされた別のライブラリです。

この特定のプロジェクトでは、B と C のコードを使用しています。したがって、構造は次のようになります。

   A
  / \
 B   C
  \ /
Project

そして、Xcode がスタティック ライブラリをリンクする方法は基本的にそれらをマージするため、B と C は両方とも A のすべてのシンボルを持っています。そのため、シンボルの重複リンカ エラーが発生しています。これに対処するにはどうすればよいですか?何かを弱くリンクする必要がありますか? または、私が見逃している特定のフラグがありますか? バイナリをリンクする以外に、ある種の依存関係を設定する必要がありますか?

ここでグーグルで検索して、多くの良い情報を見つけましたが、この特定の状況にひねることができたものは何もありません.

考えの更新

ですから、静的ライブラリを読んだ後、可能な解決策のように思われるので、これを尋ねさせてください。

3 つの独立した静的ライブラリを使用するのではなく、それらすべてを 1 つのプロジェクトに配置して、単に複数の静的ライブラリ ターゲットを使用する必要がありますか? ターゲットの依存関係を使用せずに、ターゲットの適切なファイルとヘッダーを含む A、AB、AC、および ABC ターゲットだけを使用しますか? これは間違いなくビルド設定がかなり複雑になり、ソース配布が少し複雑になる可能性がありますが、現在の問題を解決し、物事を処理するためのより良い方法になる可能性があります. どう思う?

4

1 に答える 1

2

静的ライブラリからオブジェクトファイルをインクルードしているため、静的ライブラリBを作成していないようです。これは正しくありません。代わりに、を作成し、独自のクラスのオブジェクトファイルのみを含めて、バイナリの最終リンクにそれらをすべてまとめます。CAABCProject

  • 正しくコンパイルするには、のヘッダーファイルBを表示できるようにする必要があります。A

  • 正しくコンパイルするには、のヘッダーファイルCを表示できるようにする必要があります。A

  • 正しくコンパイルするには、's、' s、および'sヘッダーファイルと、正しくProjectリンクするために' s、's、および' sライブラリ()ファイルを表示AできるBようにする必要があります。CABC.a

プロジェクトの依存関係を正しく設定すると、Xcodeワークスペースがすべてのヘッダー/ライブラリ検索パス設定を処理すると思いますが、私はそれについて間違っている可能性があり、それらのパスを自分で設定する必要があるかもしれません。

于 2013-01-22T14:33:30.710 に答える