41

(私の質問は以前にここで尋ねられましたが、私が見ることができる実用的な答えはありません。例えば、静的ライブラリプロジェクトとアプリケーションプロジェクトを含むXcode4ワークスペース

サードパーティが提供するライブラリを使用しようとしています。libLibraryName.aファイルをビルドする XCode プロジェクトを提供します。プロジェクトをサブプロジェクトとして自分のプロジェクトに追加し、製品のlibLibraryName.aファイルをプロジェクト設定の「バイナリとライブラリをリンクする」で説明されているライブラリのセットに追加することをお勧めします。

ライブラリは正しくビルドされます: .a ファイルが生成されます。しかし、このプロジェクトでは、Products グループの下に赤いlibLibraryName.aファイルが表示されます。黒くするわけにはいきません。親プロジェクトは、リンクするLibraryNameが見つからないと言っています。

テストとして、XCode 4 static-library テンプレートを使用して新しい静的ライブラリ プロジェクトを作成しました。このプロジェクトは同じ動作を示します。.a ファイルがビルドされていても、製品が「黒」で表示されることはありません。(編集:シミュレーターではなくデバイス用にビルドすると黒くなります)。

XCode 4 はデフォルトで中間ファイルと製品ファイルを共有の場所に配置することを知っています。この設定を試してみて、ビルド設定に記載されているフォルダーに製品ファイルを配置するように設定を変更しました。どちらの設定も機能しません。

また、シミュレーターではなくデバイス向けのビルドを提案する人もいます。私はこれを無駄にしようとしました。

何を与える?製品をビルドした場所をスタティック ライブラリ プロジェクトに認識させ、その後別のプロジェクトでこの製品を参照するにはどうすればよいですか?

4

6 に答える 6

55

フープジャンプがたくさんありますが、機能するようになったので、ここに私のメモがあります。

  • 新しいストック XCode4 iOS の「Cocoa Touch Static Library」プロジェクトを作成すると (それにコードを追加すると)、プロジェクトはそのままで問題なくビルドされます。ただし、製品ファイルlibLibraryName.aは、デバイス ビルドを実行すると、(ファイルが存在しないことを示す赤から) 黒に変わるだけです。シミュレーターのビルドでは、実際にはターゲットがビルドされたことが示されません。

  • プロジェクトのターゲットビルド設定では、「構成ごとのビルド製品パス」のデフォルト$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)$(IPHONEOS_DEPLOYMENT_TARGET)ファイルlibLibraryName.aが黒くなることはありません。私にとって、これは XCode のどこかにバグがあることを示しています。

  • ビルド後に製品ファイルが黒くなることはありません (これは良い指標ですが、なんでもいいです)。しかし、シミュレーターまたはデバイス用のライブラリの正しいビルドを見つけるには、使用するプロジェクトが必要です。 . 理想的な世界では、i386/arm6/arm7 ビットを含む単一の .a ファイルが存在しますが、これも私のライブラリ/ライブラリ プロジェクトではありません。

  • XCode4 移行ガイドは、私に光を見せてくれたものです。両方のプロジェクトをホストするワークスペースを作成することが規定されており、両方が同じ共有ビルド ディレクトリにビルドされます。以前はワークスペースを使用していなかったので、[ファイル]/[ワークスペースとして保存]コマンドを使用して新しいワークスペース ファイルを作成しました。次に、ライブラリ プロジェクトを子としてではなく、プライマリ プロジェクトのピアとして配置するように注意しながら、ライブラリ プロジェクトを追加しました。

  • ビルド出力を共通フォルダーに配置するようにワークスペースが構成されていることを確認する必要がありました。[ワークスペース設定] ダイアログで、[ビルドの場所] 設定を [ビルド製品を派生データの場所に配置] に設定します。

  • また、[スキームの管理] ダイアログで、各プロジェクトの「共有」チェックボックスを必ずオンにする必要がありました。

  • 最後に、メイン プロジェクトのライブラリ依存関係を指定するために、ターゲットの [ビルド フェーズ] タブの [バイナリをライブラリにリンク] セクションに移動し、[+] をクリックして、ワークスペース フォルダーの下からlibLibraryName.aファイルを選択しました。以前、ワークスペースも共通のビルド ディレクトリもなかったときにこれを試したことがあることに注意してください。その結果、XCode はリンク中に .a ファイルを見つけることができませんでした。

すべてのことを言って、それは魅力のように機能します。XCode3にあったと信じているので、もっと簡単になるはずだと思わずにはいられません。

このすべてに関する他の人の経験、または静的ライブラリのリンクをうまく機能させる他の(より簡単な?)方法に関するフィードバックを読んでいただければ幸いです。

于 2011-05-20T19:59:20.370 に答える
6

ここで私の答えをチェックして、それが役立つかどうかを確認してください:

XCode 4 で静的ライブラリを iOS プロジェクトにリンクする

これらは、私自身のライブラリに対する私の指示に基づいています。元のプロセスで欠けているステップは、「バイナリをライブラリにリンクする」でリンクすると同時に、静的ライブラリをターゲット依存関係としてアプリ プロジェクトに追加しないことだと思います (私の手順のステップ 3)。ヘッダーがスタティック ライブラリ プロジェクトによってどのようにリンクされているかによっては、手順 5 を実行する必要がある場合もあります。

静的ライブラリ プロジェクトへのプロジェクト間参照を持つ独自のアプリでこのプロセスを実行すると、実際には、Xcode 3 の同等のプロセスよりも 1 ステップ少なくなります。

于 2011-05-25T19:42:18.760 に答える
3

私のソリューション ノートOpen Radar エントリをご覧ください。

赤色の製品ノードは Xcode のバグです。プロジェクトのビルド設定を変更することで機能させることができSDKROOTます。ターゲットビルド設定は、IDE の表示とサポートでは機能しません。

編集

あとで参考に。

現在、私の意見は、Xcodeプロジェクトが複数のプラットフォームを完全に処理できるわけではないという意見に変わりました。複数のプラットフォームを表示できますが、SDKROOT設定により一度に選択できるプラットフォームは 1 つだけです。iOSを選択するとDebug-iphoneos、ビルド プロダクト パスのようなものが使用されます。そのため、すべての Mac OS X ターゲットが失われます。Mac OS Xを選択すると、次のようなものが使用されますDebug。そのため、すべての iOS ターゲットの製品が欠落します。

Xcodeには、これに関連する内部バグがまだあると思います。Xcode を安定させるには長い時間がかかります。

于 2011-06-19T06:07:52.230 に答える
2

私のチームにも同じ問題がありました。開発者の 1 人がこの問題に苦しんでいましたが、私の xcode はコンパイルでき、ヘッダーを適切に見つけました。ところで:すべての「ビルド設定」は適切に構成されています(常にユーザーパス、ユーザーヘッダーパスなどを検索してください)。

彼のプロジェクトは、パスにスペースが含まれるディレクトリ (../my project/blah.xcodeproj) にあることに気付きました。それを変更すると、Xcode は同じワークスペース内の静的ライブラリからヘッダーを見つけることができました。

ディレクトリ名に注意してください。私の2セント

于 2011-11-14T15:09:40.190 に答える
1

明確な詳細の1つ(ビルド出力を調べてから斜視を始めるまで):ライブラリヘッダーがにエクスポートされBuild/Products/Debug、親プロジェクトが調べているBuild/Products/Debug-iphonesimulator場合、ライブラリはiOSではなくOSX用にビルドされています。これは、プロジェクト設定の[アーキテクチャ]セクションにある[サポートされているプラ​​ットフォーム]設定で変更できます。バニラC++静的libプロジェクトを作成する場合、OS Xがデフォルト設定のように見えるため、この状況は簡単に発生します。

于 2013-03-11T20:47:19.650 に答える
-1

ライブラリの1つでこの問題が発生していました。実際には、私が構築した他の 4 つのライブラリが含まれています。私の赤いライブラリは、ライブラリ プロジェクトのビルド設定で Base SDK を変更することで解決されました。ライブラリは Mac OS X および iOS 用にビルドできるため、Mac OS X 設定に設定されました。iOS ターゲット ライブラリはまだビルドされていますが、黒くなることはありませんでした。Base SDK のビルド設定を最新の iOS に変更すると、ライブラリが黒くなりました。

于 2013-03-07T00:08:20.377 に答える