web-dev-qa-db-ja.com

エラー:「ファイルはアーカイブ用にビルドされましたが、リンクされているアーキテクチャではありません(armv7s)」

私は独自の静的C++ライブラリを構築しました。これは設定で構築されています:

  • アーキテクチャ:armv7、armv7s
  • アクティブなアーキテクチャのみを構築:いいえ
  • サポートプラットフォーム:iOS
  • 有効なアーキテクチャ:armv7、armv7s

ライブラリプロジェクトは正常にビルドされ、.aファイルが取得されました(ビルドフォルダーをクリーンアップし、設定を有効にするためにプロジェクトを再度ビルドしました)。

ライブラリ(.aファイル)をiOSプロジェクトに追加しましたが、iOSプロジェクトでまったく同じ設定を設定してもプロジェクトはビルドされません。

  • アーキテクチャ:armv7s、armv7
  • アクティブアーキテクチャのみのビルド:はい
  • サポートプラットフォーム:iOS
  • 有効なアーキテクチャ:armv7、armv7s

このエラーが発生し続けます:

ld:warning:ignoring file /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a、ファイルはリンクされているアーキテクチャではないアーカイブ(armv7s): /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a

私は何が欠けていますか? .aファイルはarmv7s用に構築されたものではないことを教えてくれますが、それはまさにライブラリを構築した設定です。

42

ライブラリを作成するときは、シミュレータとデバイスの両方でコンパイルし、2つの出力(.aファイル)を1つのライブラリにマージしてから、iOSプロジェクトにリンクする必要があります。

33
graver

私自身も同様の問題に遭遇しました。 @graverのソリューションは間違いなく有効です。

問題は、ライブラリがarmv7ではなくarmv7s向けに構築されていたことでした。 lipo <path/to/lib.a> -infoを使用して、これを自分で確認できます。

Build Active Architectures OnlyオプションをNoに設定すると、問題が修正されます。

お役に立てれば。

36
Buzzy

追加の注意事項は次のとおりです。

    Build Active Architectures Only  set to no

libプロジェクト用です。

23
lbsweek

Cocapodを使用した場合、まったく同じエラーが発生しました。私にとっての解決策は、ターゲットとポッド用に2つの異なるBuild Active Architectureを作成することでした。

アプリのターゲット:

Build Active Architectures Only  **Yes**

ポッドターゲット

Build Active Architectures Only  **No**
7
Kevin ABRIOUX

残念ながら、これらすべてのアドバイスは役に立たない-Xcode 7.3.1(7D1014)、iPhone5。しかし、すべてのXcode一時ファイルを削除(+ Xcodeを再起動)し、再構築するとすぐに機能した。

2
Alexey Ishkov

CocoaPodsを介して使用されているFacebook SDK(v 4.24.0)で私は偶然起こりました。

ポッドで_Build Active Architectures Only_をクリーンアップするかNOに設定しても、問題は解決しませんでした。

解決策は、ビルドディレクトリを空にすることでした(ビルド設定/ビルドの場所/ CONFIGURATION_BUILD_DIRを参照)OR $(CONFIGURATION_BUILD_DIR) Xcode変数。

1
Nicolas Buquet

XCode 5.1.1を使用して、説明されている問題に遭遇しました。この問題を解決するためのより便利な方法は、(ビルド/アーカイブメニューを使用して)アーカイブを作成して配布することです。配布されたlibファイルには、定義されたすべてのアーキテクチャが含まれます。

0
boto