静的ライブラリを構築しました。 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を追加してみました。でも運がない
これと同じ問題に苦労し、ビルド設定の更新、リンカーの検索パスのクリアなど、受け入れられているすべての回答に従った後、私は最終的に自分に合った答えを見つけました。
ビルドする前に、iOSデバイスではなく正しいタイプ(iPhone Simulator)を選択してください。その後、再構築します。それ以外の場合は、iOSデバイス(アームプロセッサ)用にビルドされたライブラリをMac(i386)のシミュレータで使用しようとしています。明らかだったはずだが、そうではなかった。
前:
後:
ここで、ナビゲータの[製品]グループを見て、静的ライブラリ(.aファイル)を右クリックし、[Finderに表示]をクリックすると、Debug-iphoneosではなくDebug-iphonesimulatorフォルダにあることがわかります。元々フォルダ名に注意を払っていなかったのか、もっと早く考えたかもしれません。
お役に立てれば。
時々、これらのタイプのエラーはあなたをいらいらさせます!
派生データの削除は私のために働く:
修正手順
1)XCODE> Windows> Project>プロジェクトを選択>派生データを削除> XCODEを終了して再度開く> MAC-O-Linker builed failedエラーが発生した場合> Refere this link> Clean and Build again 。
きみの libnetUtils.a
は、ターゲットとは異なるアーキテクチャ用に構築されています。
LibnetUtilsビルド設定を確認してください。それが構築されているアーキテクチャと、サポートされているアーキテクチャのリストは、ターゲットのアーキテクチャの(弱い)スーパーセットでなければなりません。ここでの複雑さは、結果のアーキテクチャがさまざまな設定に分散していることです:「アーキテクチャ」、「アクティブなアーキテクチャのみをビルド」、「有効なアーキテクチャ」。
「アクティブなアーキテクチャのみを構築する」設定は、これを特に混乱させます。たとえば、シミュレーター用に構築しているとします。デバッグの「アクティブなアーキテクチャのみを構築」設定が「いいえ」に設定されている場合、「アーキテクチャ」および「有効なアーキテクチャ」にリストされているすべてのアーキテクチャ(おそらくarmv7など)が構築されます。ただし、libnetUtilsの設定がYes(デバッグ:Yes)に設定されている場合、i386用にのみビルドされます。そのため、リンカーがarmv7をi386にリンクしようとすると失敗します。
ファイルを無視するという警告が表示されたら-lipo -info
以下のようにアーキテクチャを見つけるために無視されたファイル
lipo -info libnetUtils.a
これは、i386、armv6、armv7、armv7s、x86_64などのいずれかを出力します。一般に、そのアーキテクチャはターゲットビルドプラットフォームと一致する必要があります。例えば。
不一致に応じて、ターゲットプラットフォーム用にライブラリを再構築するか、ターゲットプラットフォームを変更する必要があります。
注:ファットバイナリの場合、lipo -info
は、上記のアーキテクチャの組み合わせを出力します。
私のアドバイスが正しいかどうかは実際にはわかりませんが、これをチェックしてみてください。
私が船長だと判断しても判断しないでください:)
これは、使用しようとしているライブラリがiOSシミュレータ用に普遍的にコンパイルされていないことを意味します(i386シンボルはMac用です)。ただし、実際のデバイスで実行すると問題なく動作するはずです。
同じ問題を抱えていて、ページからさまざまな解決策を試してみました。ライブラリがarm64用にビルドされていないというメッセージがまだありました。
最後に私がそれを解決した方法:
XCodeによって表示されるビルド設定が不完全で、プロジェクトファイルに正確に対応していない場合があります。
デバイスでアプリケーションを実行する場合、この問題は発生しません。 iOSデバイスでコードを実行して確認できます。
私には、Build Active Architecture Only
をMultiple values
に設定して修正しました。それを行うには、それを展開し、Debug
をYES
に、Release
をNo
に設定する必要があります。そして今、私のデバイスでコンパイルします。