5

かなり複雑な iOS アプリケーションを開発しています。開発を合理化するために、各モジュールをスタンドアロン プロジェクトとして開発し始めました。これらのモジュールは、最上位のアプリケーション プロジェクトで一緒に構成され、依存関係のツリーが作成されます。

以前にこのアプローチを成功させたことがありますが、今回は問題を引き起こす共有依存関係 (C) があります。

     A
    /|\
   / | \
  B  C  D
 / \     \
C   E     C

A は最上位のアプリケーション プロジェクトで、C は関数の「コア ライブラリ」です。このコア ライブラリは、A 自体、およびモジュール B と D の依存関係です。その結果、複数のコンパイルが発生し、ビルド フォルダーでシンボルが重複し、リンクに失敗します。

今、私は実用的で、A からの参照を削除することができます。これはとにかく B によってビルド フォルダーにコンパイルされるためです。D が関与していなければ、これはうまくいくでしょう。しかし、B と D からの C 依存関係の重複を解決するにはどうすればよいでしょうか? B および D プロジェクトは、スタンドアロンでコンパイルするときに C への参照が必要ですが、A のコンテキストで 2 回コンパイルすると衝突が発生します。

objcopy を使用して一意のプレフィックスを与える複雑なソリューションを想像できますが、同じコードであるため、これはやや非効率的です。私はこれで生きていけるのですが、もっと良い方法はありますか?おそらく、ビルドフォルダーに既存のシンボルが存在する場合は、再度コンパイルするのではなく、それを再利用するためのコンパイラーまたはリンカーフラグですか?

アドバイスをありがとう。

4

1 に答える 1

0

私にとって最も効果的な解決策は、各モジュール プロジェクトに 2 つのターゲットを設定することでし

これら 2 つのターゲットは、リンク段階が-NoLinkで省略されていることを除いて同一です。その結果、中間の.oファイルのみが作成され、ビルドはルート プロジェクトまで進行し、最終的にすべてのモジュールにリンクされます

リンクされたターゲット<TargetName>は残り、ツリー内の任意のポイントですべての依存関係をリンクする柔軟性を保持し、任意のモジュールのスタンドアロン.aファイルを生成します。

于 2015-10-04T12:37:25.193 に答える