2012-04-18 17 views
1

iOS/iPhone/XCodeの世界では全く新しいものですから、誰もが知っているはずの、簡単な答えで行く。 :-)iOS/iPhoneアプリをi386以外にビルドすることはできません

私は他の会社に委託していたiPhoneプロジェクトを継承しました。私の唯一の目的は、ダンを作ることができることです。私はXCode 4.2をセットアップし、適切なSDKをインストールしました。私はプロジェクトをロードし、すべてがこの時点で良いようです。しかし、私がビルドするとき、私はビルドのリンク段階であると信じているものからエラーを得る。ビルド時にステータスがすばやく変わるので、私は完全にはわかりません。私はオンラインで見つけることができたものから、

Error from XCode build

が、私が使用しているライブラリのいずれかがI386プラットフォーム用にコンパイルされていなかったようです。私が手にエラーは以下の通りです。私が使用しているライブラリ(これらのエラーがどこから来ているか)は現在、サブプロジェクトとして含まれており、.aというファイルはアーチに依存しないと考えられているので、これは私にとって意味がありません。ここで間違っていますか?)。また、私はXcodeをi386アーキテクチャに構築するように指示したプロジェクトのどこにも見つけることができません。

  • は、これらのエラーが生じているファイルは、ビルドフェーズタブの「ソースをコンパイル」セクション(.mファイル)
  • セットに含まれていたことを確認しました:これは私がこれまで何をやったかであります私のアーキテクチャにarmv6armv7を設定し、アクティブアーキテクチャのみを構築~いいえに設定します。私はリリース構成を使用してビルドするとき、私は、

主プロジェクトコンフィグ main project build configuration

サブプロジェクトコンフィグ sub project config



イベント(下の画像を参照してください)まだこのエラーが発生し、私はwh y。私がビルド設定で見ているすべては、私がのアームアーキテクチャですべてをビルドしなければならないことを示しているようです。

+0

静的ライブラリは、作成者が普遍的な(lipoを使用して)作成した場合、アーキテクチャに依存しないことがあります。ほとんどの場合、開発者はそれをしません(私の理解を超えている理由で)。そのため、現在のアーキテクチャに応じて、 "正しい"ライブラリバージョンを手動でリンクする必要があります。 – Till

+1

i386はシミュレータ用で、.aファイルはプラットフォームに依存しません。私は間違っていないと、Windows上の.libのようなUNIXスタイルの静的ライブラリです。 – borrrden

+0

@borrrden、私は.aファイルがオブジェクトコードであると考えています。つまり、プラットフォーム(プロセッサ)に依存しています。 –

答えて

3

アーキテクチャ設定を混乱させるため、エラーが発生しています。これらをARMコードに合わせて修正するのではなく、i386も使用するようにしてください。

あなたの(サブ)プロジェクトのうちの1つは、シミュレータバージョンをビルドしようとするとリンカエラーとなるARMコードのみをビルドします。それはあなたのアーキテクチャ設定がそうではないために起こります。

は、それが唯一のARMコードをビルドするように、1つが間違っていることを、どれのiOS SDKのためのあなたの設定に注意してください。その特定の設定を選択した後で、キーボードのバックスペースキーを使用してこれらの設定を完全に削除します(シングルクリック)。

そして、これはどのようにすべきである:シミュレータ固有のコードを構築する際に、デバイス固有のコードとi386を構築する際 enter image description here

$(ARCHS_STANDARD_32_BIT)ARMV7に解決されます。私のスクリーンショットのコードをARMV6に含めれば、古いiOSデバイス(iPhone 3G以下)に結果を提供する予定がある場合にのみ必要です。

すべての(サブ)プロジェクトでこれらの設定がであると、すべてがスムーズに動作するはずです。

他の開発者に静的ライブラリを配布する場合は、LIPOを使用すると便利です。

例:

lipo input_library_1.a input_library_2.a -create -ouput output_library.a 

が、これは、シミュレータとデバイスの両方で使用可能なユニバーサルバージョンにそれらを参加する、input_library_1はi386特定(シミュレータ)だったとinput_library_2が特定ARM(デバイス)であったとしましょう。

0

デバイス用に構築された静的ライブラリ(armv6またはarmv7)にリンクしようとしているようです。シミュレータのためのあなたの建物はi386アーキテクチャになります。だからあなたはこれらの厄介なリンクエラーをすべて取得します。ソリューションは、シミュレータ用にコンパイルされたライブラリをプロジェクトに組み込むことです。

関連する問題