web-dev-qa-db-ja.com

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

CocoaPodsからファイルをインポートするたびに、Apple Mach-O Linker Errorが発生します。

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

私が使用するさまざまなPodについて、これらのうちの約12個が得られます。

私はXCode 5を使ってiPhone 5S用に構築しようとしています。

私はここでさまざまな解決策をSOで試してきましたが、まだどれもうまくいくことができていません。

このApple Mach-O Linker Errorを修正するにはどうすればよいですか?


おもしろいかもしれないもう一つの警告を見つけた、私はこれが解決策に私を導くことを願っています:

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

178
GangstaGraham

あなたの Architectures Valid Architectures が正しければ、以下のように、 Other Linker Flags に、ポッドで生成されるリンカフラグを追加する$(inherited)を追加したかどうかをチェックできます。 enter image description here

228
chancyWu

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

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

編集:また、この問題を解決するには、アクティブアーキテクチャ用に構築をYESに設定する必要があるとの報告もありました。

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

enter image description here

120
AdamG

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

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64

52
morisunshine

私は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. Open ライブラリとバイナリをリンク
  5. 最後に、 + the AVKit framework /その他の framework を追加するだけです。

うまくいけば、これは他の誰かが私が持っていたのと同じ問題にぶつかるのを助ける。

36
NorthBlast

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

フォルダの配置

〜/ライブラリ/開発者/ Xcode/DerivedData /

enter image description here

32
ylgwhyh

アーキテクチャ to armv7 armv7s アクティブアーキテクチャのみを構築 to _ no _ すべてを含むプロジェクト in Pods

25
BabyPanda

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

Target Membership

16
jaytrixz

build_active_architectureがNOに設定されている理由の説明。 Xcodeは接続した機器を検出し、それに応じてアクティブアーキテクチャを設定します。それであなたがあなたのコンピュータに第二世代のiPod Touchを差し込むならばXcodeはarmv6にアクティブなアーキテクチャを設定するべきです。上記のデバッグ設定でターゲットをビルドすると、時間を節約するためにarmv6バイナリのみがビルドされるようになります(巨大なプロジェクトがない限り、違いに気付かないかもしれませんが、時間が経つにつれて数秒かかることになります)。

App Storeに公開するためのDistribution設定を作成するときは、このオプションが設定されていないことを確認して、脂肪のあるユニバーサルバイナリ http://useyourloaf.com/blog/2010/04/21/xcode-buildを構築します。 -active-architecture-only.html

11
Moaz Saeed

DerivedData - > Build - > Products - > Debug-iphoneosの内容を削除した後に解決しました

5
Tamir Avrahamov

これはlibz.dylibまたはlibz.tbdに関連している可能性があります。リンクしているバイナリのターゲットに追加してから、もう一度コンパイルしてください。

4
TonyTony

arm64 有効なアーキテクチャ から削除し、 _ no _ Active Architecture Only に設定するだけです。今、ただクリーン、ビルド、そして実行してください。あなたは二度とこのエラーを見ることはないでしょう。

:) KP

4

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

私は複数のスキームを持っていました、それはDemo、Internal、Releaseのためにうまくコンパイルされていました - しかしデバッグスキームはただコンパイルされずlibPods.aが欠けていることについて不平を言いました。

解決策は、「プロジェクト」 - >「ターゲット」 - >「ビルド設定」を選択し、「Build Active Architecture Only」をYESに変更することでした。きれいにして造ってください!ついに頭のかゆみの何時間も解決しました!

3
GameDev

IPhone 5がまだサードパーティのライブラリの64ビット版を受け取っていないことを考えると、私は最新のXcodeを使って32ビットモードに戻らなければならなかった(5.1より前は文句を言わなかった)。

Valid Architecturesリストからarm64を削除し、次にBuild Active Architecture OnlyをNOに設定することでこれを修正しました。私にはこれが上で示されているように他の方法よりももっと理にかなっているようです。他の人が上記の解決策をどれも手に入れることができない場合に備えて、私は投稿しています。

3
user938797

有効なarchをarmv7、armv7sに設定し、build active architecturesをリリースでのみYESに設定してから、コマンドラインから新しい「pod install」を実行することで解決しました。

3
Fabio Russo

Xcode 5.1にアップグレードした後に同じ問題があり、 Architecture /を armv7 armv7s に設定して修正しました。

3
deko

これは私のために働いた:

iOS SDK 9.3

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

きれいにして造ってください、私のために働きました。

2
Shashank Saxena

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

2
Thomas G.

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

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

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

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

1
Michael Yang

morisunshine answerが正しい方向を向いていたので、彼の答えを少し微調整してiOS8.2に関する私の問題を解決した。彼に感謝します。

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

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO
1
SandeepAggarwal

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

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

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

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

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

#import "Source/GPUImage.h" 

指摘すべきいくつかの点:

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

上記が助けてくれることを願っています-何度も質問されるにもかかわらず、どこにも明確な指示がなかったようですが、恐れないで、GPUImageは間違いなくarm64アーキテクチャで動作します!

1

私の場合は、探していた

C++ Standard Libraryをクリックし、libc++が選択されたものであることを確認してください。

1
CoachNono

私の場合(Xcode 9)では、TesseractOCRiOSを使用してこのエラーを解決するソリューションはありません。何時間もの試行錯誤の末、私は良い解決策を思いつきました。 Podfileから'pod 'TesseractOCRiOS', '~> 4.0.0'を削除し、pod installを実行します。そして、pod 'TesseractOCRiOS', '~> 4.0.0'Podfileに戻して再度pod installを実行します。

バング!できます!

1
0xa6a

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

下記のopencv podテキストを追加して試してみることができます。オフラインのopencvフレームワークを使用している場合は削除してください。

ポッド「OpenCV」、「2.4.9」

1
Chuyang

この問題は、Podfileとpod installを介してポッドをインストールした後に発生しました。さまざまな修正を試した後、ついにPodを手動でインポートし(必要なファイルを自分のプロジェクトにドラッグして)、問題を解決しました。

1
Will Dennis

私はこの問題を克服するためにAWSフレームワークをインストールした後に同じ問題に直面しています、私はAWS PODをインストールした後に作成されるあなたのプロジェクトから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
Swapnil1156035

私の問題は、私がすでに自分のプロジェクトにいくつかのFacebook SDK(FBSDKLoginKitとFBSDKCoreKit)を持っているということでした。

私はもう1つのSDK(FBSDKShareKit)を必要とし、それをインポートしただけなので、「arm 64用の未定義シンボルアーキテクチャ」を与えました。

FBSDKShareKitはFBSDKCoreKitの更新版に依存しているので、他のフレームワークを更新することで、すべてがまたうまくいった。

0
Morten

msgstr "" "OPN [デバッグ]ターゲットはOTHER_LDFLAGSビルド設定を上書きします"#:。これが主な問題でした。他のリンカフラグの新しい行に$(inherited)を追加した後、私の問題は解決しました。 enter image description here

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

私は同じ問題に直面しました。私がここで見つけた解決策: なぜリンカが静的ライブラリとエラーをリンクするのか?iOS

$(TOOLCHAIN_DIR)/ usr/lib/Swift/$(PLATFORM_NAME)ライブラリ検索パスに追加問題を修正しました。

0
Dmitry Soloviov

C++コードを呼び出すc ++で記述された.framework/.aを使用する場合、ファイルを.mmファイルに変更する必要があります。

私はその中で半日を失いました...

0
andaji

"Security.framework"を追加すると、私にはうまくいきました。

0
Eran Talmor

アーキテクチャとリンカの設定が良ければ、hファイルを調べてください。私の問題は同じエラーでしたが、私はhファイルを再構築し、私はexternステートメントを削除しました。他のm個のファイルがその変数を使用していたため、リンカエラーが発生しました。

0
Nick

私はこの問題を私の ' 包括的フレームワーク 'と持っていましたが、私は2番目のレベルのフレームワークを構築していました。

私は最初のレベルのフレームワークの 'Generic iOS Device'用のBuild Schemeを変更することでこれを解決しました。私はこれが_CodeSignatureを変えるだろうと思います、それは私が私の全体の「アンブレラフレームワーク」をGitHubにプッシュするときに違いを見ました。

0
Nijat2018

これは古い枝です。しかし、最新のCocoaPodsバージョン(1.0.0)に移行し、すべてのPODを再インストールしようとした後に、同じ問題が発生し始めました。 "Missing symbols for armv64"リンカエラーが発生しました。奇妙なことに、私は以下のステップを実行することによってそれを解決しました:

  1. すべてのポッドを削除する(pod init、pod install)

  2. 逆の順序でPodファイルを書き換えます(POD "Mixpanel"、POD "Intercom"の代わりに、私は使用しました:POD "Intercom"、POD "Mixpanel")。

  3. ポッドインストール

ポッドファイル内の依存関係の順序を逆にしてポッドを再構築すると、問題が解決しました。

0
Arik Segal