1

コードを再利用するために、Xcode iPhone プロジェクトを複数の小さなプロジェクトに分割しています。構造は次のようになります。

+------------+
|    App     |
+------------+
      |
      +------------------+
      |                  |
+--------------+ +--------------+
| Static Lib A | | Static Lib B |
+--------------+ +--------------+
        |                |
        +----------------+
                |
         +--------------+  +----------------+
         | Static Lib Z |--| Static Lib KAL |
         +--------------+  +----------------+

すべてが正しくコンパイルされますが、アプリがリンクされるとすぐに、リンカーは KAL (オープン ソースのカレンダー ライブラリ) ライブラリの 2 つのシンボルを見つけることができません。各ライブラリには相互参照があり、すべてのアーカイブは「バイナリをライブラリにリンク」ビルド フェーズに追加されます。

エラーは次のとおりです。

未定義のシンボル:
"_OBJC_CLASS_$_KalViewController"、参照元:
libA.a(AViewController.o) の objc-class-ref-to-KalViewController
"_OBJC_CLASS_$_KalDate"、参照元: libA
の objc-class-ref-to-KalDate .a(AViewController.o)
ld: シンボルが見つかりません
collect2: ld は 1 つの終了ステータスを返しました

私はLibAのAViewControllerでLibZのクラスを使用しています.LibKALのクラスを使用しています。

PS: A と B の分離は、アプリのすべてのビルドが 2 つによって提供される機能を必要とするわけではないという単純な理由によるものです。

4

1 に答える 1

0

多くの人と同じように、これを理解しようと数夜を費やした後、これを配置した直後に機能させることができました.
問題は、ライブラリ プロジェクトへの参照を追加したときに、Xcode がアーカイブ ファイルではなく、プロジェクト自体を依存関係として追加したことでした。これは、リンカーが(明らかに)シンボルを見つけられない原因でした。

于 2010-12-16T20:48:20.087 に答える