web-dev-qa-db-ja.com

リンクされているアーキテクチャではないアーカイブ用にファイルが作成されました(i386)

静的ライブラリを構築しました。 iPhoneおよびiPadアプリで使用したい。シミュレータを実行しようとすると、リンクエラーが発生します。私はiOS開発の初心者です。親切に助けてください。

ld:警告:ファイル/Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.aを無視します。ファイルは、リンクされているアーキテクチャではないアーカイブ用に作成されました(i386)アーキテクチャi386の未定義シンボル:
"_ OBJC_CLASS _ $ _ netUtils"、参照元:ViewController.oのobjc-class-ref ld:アーキテクチャi386のシンボルが見つかりませんclang:エラー:リンカコマンドが終了コード1で失敗しました(-vを使用呼び出しを参照)

アーキテクチャにi386を追加してみました。でも運がない

74
yarlg

これと同じ問題に苦労し、ビルド設定の更新、リンカーの検索パスのクリアなど、受け入れられているすべての回答に従った後、私は最終的に自分に合った答えを見つけました。

ビルドする前に、iOSデバイスではなく正しいタイプ(iPhone Simulator)を選択してください。その後、再構築します。それ以外の場合は、iOSデバイス(アームプロセッサ)用にビルドされたライブラリをMac(i386)のシミュレータで使用しようとしています。明らかだったはずだが、そうではなかった。

前:

iOS Device Settings

後:

iPhone 5.1 Simulator Settings

ここで、ナビゲータの[製品]グループを見て、静的ライブラリ(.aファイル)を右クリックし、[Finderに表示]をクリックすると、Debug-iphoneosではなくDebug-iphonesimulatorフォルダにあることがわかります。元々フォルダ名に注意を払っていなかったのか、もっと早く考えたかもしれません。

お役に立てれば。

73
Cody A. Ray

時々、これらのタイプのエラーはあなたをいらいらさせます!

派生データの削除は私のために働く:

修正手順

1)XCODE> Windows> Project>プロジェクトを選択>派生データを削除> XCODEを終了して再度開く> MAC-O-Linker builed failedエラーが発生した場合> Refere this link> Clean and Build again 。

41

きみの libnetUtils.aは、ターゲットとは異なるアーキテクチャ用に構築されています。

LibnetUtilsビルド設定を確認してください。それが構築されているアーキテクチャと、サポートされているアーキテクチャのリストは、ターゲットのアーキテクチャの(弱い)スーパーセットでなければなりません。ここでの複雑さは、結果のアーキテクチャがさまざまな設定に分散していることです:「アーキテクチャ」、「アクティブなアーキテクチャのみをビルド」、「有効なアーキテクチャ」。

「アクティブなアーキテクチャのみを構築する」設定は、これを特に混乱させます。たとえば、シミュレーター用に構築しているとします。デバッグの「アクティブなアーキテクチャのみを構築」設定が「いいえ」に設定されている場合、「アーキテクチャ」および「有効なアーキテクチャ」にリストされているすべてのアーキテクチャ(おそらくarmv7など)が構築されます。ただし、libnetUtilsの設定がYes(デバッグ:Yes)に設定されている場合、i386用にのみビルドされます。そのため、リンカーがarmv7をi386にリンクしようとすると失敗します。

28
achow

ファイルを無視するという警告が表示されたら-lipo -info以下のようにアーキテクチャを見つけるために無視されたファイル

lipo -info libnetUtils.a

これは、i386、armv6、armv7、armv7s、x86_64などのいずれかを出力します。一般に、そのアーキテクチャはターゲットビルドプラットフォームと一致する必要があります。例えば。

  • i386 = iOSシミュレータまたはMac OS Xでの32ビットビルド
  • armv6 armv7 arm7s = iOSデバイス
  • x86_64 = Mac OS Xでの64ビットビルド

不一致に応じて、ターゲットプラットフォーム用にライブラリを再構築するか、ターゲットプラットフォームを変更する必要があります。

注:ファットバイナリの場合、lipo -infoは、上記のアーキテクチャの組み合わせを出力します。

25
Kiran

私のアドバイスが正しいかどうかは実際にはわかりませんが、これをチェックしてみてください。

  • プロジェクトを選択してください
  • 「ビルド設定」を選択します
  • アーキテクチャの確認:
    • 有効なアーキテクチャは「armv6 armv7」である必要があります
    • サポートされているプラ​​ットフォームは「iphonesimulator iphoneos」(iPad、たぶんわかりません)です
    • 基本SDK – iOS SDK(iOS 5.0があります)。

私が船長だと判断しても判断しないでください:)

9

これは、使用しようとしているライブラリがiOSシミュレータ用に普遍的にコンパイルされていないことを意味します(i386シンボルはMac用です)。ただし、実際のデバイスで実行すると問題なく動作するはずです。

5
CodaFi

同じ問題を抱えていて、ページからさまざまな解決策を試してみました。ライブラリがarm64用にビルドされていないというメッセージがまだありました。

最後に私がそれを解決した方法:

  • テキストエディタでライブラリのproject.pbxprojを開きました
  • VALID_ARCHSを検索
  • 4つのオカレンスがあり、2つにarm64が含まれていませんでした
  • チェーンに手動でarm64を追加しました(VALID_ARCHS = "arm64 i386 armv7 armv7s")
  • ライブラリを再構築し、それは大丈夫だった

XCodeによって表示されるビルド設定が不完全で、プロジェクトファイルに正確に対応していない場合があります。

3
Eino Gourdin

デバイスでアプリケーションを実行する場合、この問題は発生しません。 iOSデバイスでコードを実行して確認できます。

私には、Build Active Architecture OnlyMultiple valuesに設定して修正しました。それを行うには、それを展開し、DebugYESに、ReleaseNoに設定する必要があります。そして今、私のデバイスでコンパイルします。

0
JESERRANO