アーキテクチャーarm64の未定義シンボル


200

CocoaPodsからファイルをインポートするたびにApple Mach-Oリンカーエラーが発生します。

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

私が使用するさまざまなポッドについて、これらの約12を取得します。

XCode 5を使用してiPhone 5S用にビルドしようとしています。

私はここでさまざまなソリューションを試してみましたが、まだ機能するものはまだありません。

このApple Mach-Oリンカーエラーを修正するにはどうすればよいですか?


興味深いかもしれない別の警告を見つけました、これが解決策につながることを願っています:

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a


シンプルなソリューションターゲット->リンク->他のリンカーフラグに移動し、デバッグとリリースの両方で他のリンカーフラグに$(inherited)を追加します。
Mihir Oza 2016

回答:


248

あなたの場合はアーキテクチャおよび有効なアーキテクチャは、すべての権利です、あなたが追加したかどうかを確認すること$(inherited)に、ポッドで生成されたリンカのフラグを追加しますこれ、 他のリンカフラグ下記のとおりです。 ここに画像の説明を入力してください


7
@chancyWu説明していただけますか?
Paul Brewczynski、2015年

5
これでも機能しない場合は、ライブラリ検索パスにも@(inherited)を追加します。
Enrico Susatyo 2015年

1
Lol、Use the $(inherited) flag端末の警告を無視しました。そして、エラーが私をここにもたらしました。私の日を救った。
スシルシャルマ2015

2
Xcode 7.2と他のリンカーフラグで作業しています->デバッグ表示:-weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ...ここに$(inherited)を追加しましたが、そうではありませんt作業
アレッサンドラ

あなたは私の多くの時間を節約しました。ありがとう。
Nirmalsinh 2016年

123

問題は、cocoapodがarm64アーキテクチャ用にまだビルドされていないため、ビルド時にリンクできないことです。それらが更新され、そのアーキテクチャを使用するまで、それらのパッケージを使用できない可能性があります。プロジェクト->ターゲット(プロジェクト名)->ビルド設定に移動し、アーキテクチャを標準アーキテクチャ(armv7、armv7s)に、有効なアーキテクチャをarmv7、armv7sに変更することで、リンカーエラーを修正できます。

ただし、これは64ビットプロセッサの能力を十分に活用できないことを意味します。あなたは5代のために構築していると言ったので、これが必要な理由があるかもしれません。何らかの理由でその能力が絶対に必要であり(おそらくゲームを構築している場合)、それらのファイルを必死に必要とする場合、プルリクエストを送信し、プルしたファイルの同じフィールドをarm64に設定することにより、プロジェクトをarm64に再コンパイルできます。オープンソースプロジェクト。ただし、これらのファイルを64ビット互換にするために本当に必要な場合を除いて、それは今のところ少しやりすぎのようです。

編集:一部の人々はまた、Build For Active ArchitecturesをYESに設定することもこの問題を解決するために必要であると報告しました。

2014-04-28現在、設定は次のようになります。

ここに画像の説明を入力してください


4
これは、シミュレータで実行する場合のエラーを解決しましたが、デバイスで実行する場合のエラーは解決しませんでした。libPods.aのポッドは拒否されました。そのアーキテクチャ ''(何らかの理由で、検出されません-Xcodeで確認できます)に、必要なすべてのアーキテクチャ 'armv7 armv7s'が含まれていませんでした
GangstaGraham

7
OK、私はBuild For Active ArchitecturesをYesに設定してこれを取得しました。どうもありがとうございます!
GangstaGraham 2013年

2
余談ですがfile、ターミナルでコマンドを使用して、静的ライブラリがサポートするアーキテクチャを指定できます。
funroll 2013年

8
コーラスに追加するためにここに来ました:アクティブアーキテクチャ用に構築するためにYESを選択することがここでの最良のオプションです。
ウェルズ

56
これはもはや解決策ではありません。Appleは現在、すべての展開で64ビットのサポートを要求しています。

52

私はそれを設定することでこの問題を解決しました:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64


1
XCode 5.1を初めて使用したときに同様の問題が発生しましたが、これで修正されました。ありがとう!
GangstaGraham 2014年

@morisunshineでよろしいですか、ビルド後にバイナリアーキテクチャを確認しましたか?
onmyway133 2014年

@ onmyway133確認しましたが、新しいXCodeでこの問題を解決できませんでした。
morisunshine 2014年

@morisunshineええ、私はあなたがarm64を失うことを意味します
onmyway133

これ以上のビルドエラーはありません。この時点までは問題ありません。しかし、アーカイブされたビルドをアップロード中に、私はarm64ビットのサポートなどのエラーが不足しているarm64ビットを取得していますと、2月1日、2015年から強制される
zeeawan

45

私は同じ/類似の問題の実装に遭遇し、AVPictureInPictureController問題はプロジェクトでAVKitフレームワークをリンクしていないことでした。

エラーメッセージは次のとおりです。

Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
       objc-class-ref in yourTarget.a(yourObject.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

ソリューション:

  1. プロジェクトに移動します
  2. ターゲットを選択してください
  3. 次に、ビルドフェーズに進みます
  4. ライブラリとリンクバイナリを開く
  5. 最後に、ちょうど追加+ AVKit フレームワーク /その他のフレームワークを

うまくいけば、これが私が持っていた同様の問題に遭遇している誰かを助けるでしょう。


6
ええ、これは、フレームワークがない場合にスローされるエラーであることを言及する価値があります。1つの手がかりは、アーキテクチャーを削除しようとすると、次のアーキテクチャーや残りのアーキテクチャーも失敗することです...
Kristen Waite

1
よくやった。`" _OBJC_CLASS _ $ _ XXXXXClass "、参照先:` ,, xxxフレームワークを追加します。
iHTCboy 2017

スポット!印刷された「xml」で何かを見た人は、これを確認してください。私の場合は、リンクされていない「libxml」フレームワークでした。
エブサス2017年

ポッドの導入を変更した後、このエラーが発生し、すべてのメソッドが修正されませんでした。しかし、あなたの方法は問題を修正します。注:libは検索できません。
恒星リー

33

私も同じ問題に遭遇しました、上記の方法は機能しません。次のディレクトリにあるファイルを誤って削除してしまいました。

フォルダーの配置:

〜/ライブラリ/ Developer / Xcode / DerivedData /

ここに画像の説明を入力してください


3
これは奇妙に思えるかもしれませんが、これは実際に機能しました。どうも。
フェリペ

2
派生データを手動で削除することも、私にとってはトリックでした。乾杯!
L_Sonic 2016年

7
ありがとうございました!ヒントを追加したいと思います。フォルダは/ User / yourname / Library / Developer / XCode / DerivedDataの下にあります
Stefano Buora '19

また、ターミナルを使用して派生データを削除できるはずです:rm -rf〜/ Library / Developer / Xcode / DerivedData
simon_smiley

時間を節約できました... XDDD
Hsiao-Ting

25

セットアーキテクチャのARMv7 armv7s唯一のアクティブ・アーキテクチャのビルドNOを含めて、プロジェクト内のすべての目標のために、一人一人ポッド


うまくいきました...現在、「無効なビットコード署名」エラーが発生しています。
JeremyF 2018

18

右側のターゲットメンバーシップで選択した実装ファイルをチェックして、私の問題を修正しました。これは、拡張機能、つまりカスタムキーボードを扱う場合に特に便利です。

対象会員


Xcode 9は、チェックボックスをオンにしても、これを自動的に適用しません。ありがとうございました。
Amro Shafie 2017年

それが問題でした。ありがとう
イグナシオ・エルナンデス

11

build_active_architectureNOに設定されている理由をいくつか説明します。Xcodeは接続したデバイスを検出し、それに応じてアクティブなアーキテクチャを設定します。したがって、第2世代のiPod Touchをコンピュータに接続すると、Xcodeはアクティブなアーキテクチャをarmv6に設定するはずです。上記のデバッグ構成でターゲットをビルドすると、時間を節約するためにarmv6バイナリのみがビルドされます(大きなプロジェクトがない限り、違いに気付かない可能性がありますが、時間の経過とともに秒数が増えると思います)。

App Storeに公開するための配布構成を作成するときは、このオプションが設定されていないことを確認する必要があります。これにより、Xcodeは代わりにファットユニバーサルバイナリhttp://useyourloaf.com/blog/2010/04/21/xcodeをビルドします。 -build-active-architecture-only.html


それは信じられないほどFUBARedです!XCodeの出力は、ビルドマシンに接続したデバイスによって異なります。
マット

6

有効なアーキテクチャからarm64を削除し、NOアクティブアーキテクチャのみに設定する必要があります。次に、クリーンアップ、ビルド、実行します。このエラーはもう表示されません。

:) KP



4

これはlibz.dylibまたはlibz.tbdに関連している可能性があります。リンクバイナリのターゲットに追加して、再度コンパイルする必要があります。


Tesseractフレームワークを追加しようとしていましたが、これだけが役に立ちました。!
HelloimDarius

3

有効なアーキテクチャをarmv7 armv7sに設定し、ビルドアクティブアーキテクチャをリリースでのみYESに設定して、コマンドラインから新しい「ポッドインストール」を実行することで解決しました


3

iPhone 5sでサードパーティライブラリの64ビットバージョンをまだ受け取っていないので、最新のXcodeを使用して32ビットモードに戻る必要がありました(5.1より前は問題ありませんでした)。

有効なアーキテクチャリストからarm64を削除し、[アクティブアーキテクチャのみをビルド]を[いいえ]に設定することで、これを修正しました。これは、上記のように他の方法よりも意味があるように思えます。他の人が上記の解決策のどれも彼らのために働くことができない場合に備えて私は投稿しています。


3

Xcode 5.1にアップグレードした後も同じ問題が発生し、アーキテクチャarmv7 armv7sに設定して修正しました


3

一日中この問題にこだわっていました。

私は複数のスキームを持っていましたが、デモ、内部、リリース用に問題なくコンパイルされていました-しかし、デバッグスキームはコンパイルされず、libPods.aが欠落していることについて不平を言っていました。

解決策は、[プロジェクト]-> [ターゲット]-> [ビルド設定]に移動し、[アクティブアーキテクチャのみをビルド]をYESに変更することでした。きれいにしてビルド!ついに頭のかゆみの何時間も解決しました!


あなたとまったく同じ問題ではなく、類似しています。あなたが提供したのと同じ方法で解決しました。
Helzgate 2015年

2

ターゲットのビルド設定-ObjCOther Linker Flagsに設定すると、問題が解決しました。


2

これは私のために働きました:

iOS SDK 9.3

app.xcodeprojのビルド設定に 有効なアーキテクチャ:armv7 armv7sビルドアクティブアーキテクチャ:いいえ

クリーンアップしてビルドし、私のために働いた。


1

以下は、64ビットのシミュレータと網膜のiPadミニの両方のためのXcode 5.1でエラーが発生することなくGET GPUImageコンパイルに私のために働いたことなく、 Retinaし、有効なアーキテクチャリストからarm64を削除する必要機能しました(テスト用に64ビットデバイスを所有する目的に反します) 64ビットのパフォーマンス)。

GitHubページから.zipフォルダーをダウンロードします。https//github.com/BradLarson/GPUImage

解凍し、「framework」フォルダに移動します。ここから、「Source」フォルダーをXcodeプロジェクトに追加してコピーします。「コピー先グループのフォルダにアイテムをコピーする」がチェックされていること、および「追加されたフォルダのグループを作成する」もチェックされていることを確認してください。これにより、一般的なiOSおよびMacのヘッダー/実装ファイルがプロジェクトにコピーされます。

iOS用にコンパイルしているためMacファイルが必要ない場合は、ファイルをプロジェクトにコピーする前にMacフォルダーを削除するか、Xcode内からグループを削除することができます。

プロジェクトにSourceフォルダーを追加したら、以下を使用してGPUImageのクラス/メソッドの使用を開始します。

#import "Source/GPUImage.h" 

指摘すべきいくつかのこと:

  • 「Cocoa」が見つからないというエラーが表示される場合は、Macフォルダー/ヘッダーをiOSプロジェクトに追加しています。Macグループ/ファイルをプロジェクトから削除するだけで、警告が消えます。
  • (Xcodeのグループではなく)Sourceフォルダーの名前を変更する場合は、#import命令で「Source / GPUImage.h」の代わりにその名前を使用してください。したがって、プロジェクトに追加する前にフォルダーの名前をGPUImageFilesに変更する場合は、次のコードを使用します。#import "GPUImageFiles / GPUImage.h
  • 明らかに、有効なアーキテクチャのリストでarm64が選択されていることを確認して、A7 64ビットプロセッサを活用してください!
  • これはGPUImage.frameworkバンドルではないため(http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimageからフレームワークをダウンロードした場合など)、GPUImageを使用する正しい方法ではない可能性がありますBrad Larsonが意図したものですが、私の現在のSpriteKitプロジェクトでは機能します。
  • フレームワーク/ライブラリなどにリンクする必要はありません-上記のようにヘッダーと実装ソースフォルダーをインポートするだけです

上記が役に立てば幸いです-複数回質問されたにもかかわらず、どこにも明確な指示がなかったようですが、恐れないでください、GPUImageは間違いなくarm64アーキテクチャで機能します!


1

この問題は、Podfileおよびを介してポッドをインストールした後に発生しましたpod install。さまざまな修正を試みた後、ようやく手動でポッドを手動でインポートし(必要なファイルをプロジェクトにドラッグ)、それで問題が解決しました。


これも機能しましたが、ファイルが1つある簡単なポッドでした。
iluvatar_GR 2017

1

モリサンシャインとして答えが正しい方向に指摘し、彼の答えに少し微調整は彼にiOS8.2 .Thanksのための私の問題を解決しました。

私はそれを設定することでこの問題を解決しました:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO

1
  1. ターゲットのビルド設定に移動します。
  2. BUILD ACTIVE ARCHITECTURE ONLY = NOをデバッグとリリースの両方に設定します
  3. ビルドして実行する

3
PODSプロジェクトでも
Elad、2016


1

私の場合、xcode 7.2 for iOSでopencv 2.4.9を使用して上記のエラーが発生しました。オフラインのopencvフレームワークではなく、ポッドインストールでopencvを使用してエラーを解決します。

以下のopencvポッドテキストを追加して試してみて、オフラインのopencvフレームワークを使用している場合は削除してください。

ポッド「OpenCV」、「2.4.9」


1

私の場合(Xcode 9)、このエラーを解決する解決策はありませんTesseractOCRiOS。何時間もの試行錯誤の末、私は良い解決策を思いつきました。私は単に実行'pod 'TesseractOCRiOS', '~> 4.0.0'して削除しPodfileますpod install。次に、追加しpod 'TesseractOCRiOS', '~> 4.0.0'て再度Podfile実行pod installします。

バン!できます!


1

「OPN [デバッグ]ターゲットは、OTHER_LDFLAGSビルド設定をオーバーライドします。」これが主な問題でした。他のリンカーフラグの新しい行に$(inherited)を追加した後、私の問題は解決しました。 ここに画像の説明を入力してください


1

場合によっては、.hファイルでもう1つのインターフェースを定義したが、これらすべてのインターフェースを実装しなかった場合、このエラーが発生しました。

リンカは.mファイルに実装を見つけることができないため、すべてのインターフェースについて.mファイルに実装する必要があります。

このエラーを解決するには:

1. .mファイルで、各インターフェイスの実装を提供します。2.再構築



0

この問題を克服するためにAWSフレームワークをインストールした後、同じ問題に直面しています。AWSPODのインストール後に作成されたプロジェクトからPOD構成ファイルを更新しました。以下のように設定ファイルを確認してください

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

設定ファイルが正しく機能していない場合は、Other Linkerフラグを$(inherited)に設定してください


0

アーキテクチャとリンカの設定に問題がない場合は、hファイルを確認してください。私の問題は同じエラーでしたが、hファイルを再構成して、externステートメントを削除しました。他のmファイルがその変数を使用していたため、リンカーエラーが発生しました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.