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
あなたの Architectures と Valid Architectures が正しければ、以下のように、 Other Linker Flags に、ポッドで生成されるリンカフラグを追加する$(inherited)
を追加したかどうかをチェックできます。
問題は、cocoapodがarm64アーキテクチャ用に構築されていないため、それらを構築するときにリンクできないことです。おそらく、それらが更新されてそのアーキテクチャーを使用するまで、それらのパッケージを使用することはできません。プロジェクト - >ターゲット(あなたのプロジェクト名) - >ビルド設定を行い、アーキテクチャを標準アーキテクチャ(armv7、armv7s)に変更し、有効なアーキテクチャをarmv7、armv7sに変更すると、リンカエラーを修正できます。
ただし、これは64ビットプロセッサの能力をフルに引き出せないことを意味します。あなたは5代のために建造していると言ったので、これが必要な理由があるかもしれません。何らかの理由でその能力を絶対的に必要とし(おそらくゲームを構築している)、それらのファイルを必死に必要とする場合は、プルリクエストを送信し、プルしたファイルでそれらと同じフィールドをarm64に設定してプロジェクトをarm64に再コンパイルできます。オープンソースプロジェクトしかし、これらのファイルを64ビット互換にする必要がない限り、現時点では少しやり過ぎです。
編集:また、この問題を解決するには、アクティブアーキテクチャ用に構築をYESに設定する必要があるとの報告もありました。
2014-04-28現在、設定は次のようになります。
私はそれを設定することでこの問題を解決しました:
ARCHS = armv7 armv7s
VALID_ARCHS = armv6 armv7 armv7s arm64
私は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)
解決策:
うまくいけば、これは他の誰かが私が持っていたのと同じ問題にぶつかるのを助ける。
アーキテクチャ to armv7 armv7s 、 アクティブアーキテクチャのみを構築 to _ no _ すべてを含むプロジェクト in Pods
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
DerivedData - > Build - > Products - > Debug-iphoneosの内容を削除した後に解決しました
これはlibz.dylib
またはlibz.tbd
に関連している可能性があります。リンクしているバイナリのターゲットに追加してから、もう一度コンパイルしてください。
arm64 を 有効なアーキテクチャ から削除し、 _ no _ を Active Architecture Only に設定するだけです。今、ただクリーン、ビルド、そして実行してください。あなたは二度とこのエラーを見ることはないでしょう。
:) KP
丸一日この問題にこだわっていました。
私は複数のスキームを持っていました、それはDemo、Internal、Releaseのためにうまくコンパイルされていました - しかしデバッグスキームはただコンパイルされずlibPods.aが欠けていることについて不平を言いました。
解決策は、「プロジェクト」 - >「ターゲット」 - >「ビルド設定」を選択し、「Build Active Architecture Only」をYESに変更することでした。きれいにして造ってください!ついに頭のかゆみの何時間も解決しました!
IPhone 5がまだサードパーティのライブラリの64ビット版を受け取っていないことを考えると、私は最新のXcodeを使って32ビットモードに戻らなければならなかった(5.1より前は文句を言わなかった)。
Valid Architecturesリストからarm64を削除し、次にBuild Active Architecture OnlyをNOに設定することでこれを修正しました。私にはこれが上で示されているように他の方法よりももっと理にかなっているようです。他の人が上記の解決策をどれも手に入れることができない場合に備えて、私は投稿しています。
有効なarchをarmv7、armv7sに設定し、build active architecturesをリリースでのみYESに設定してから、コマンドラインから新しい「pod install」を実行することで解決しました。
Xcode 5.1にアップグレードした後に同じ問題があり、 Architecture /を armv7 armv7s に設定して修正しました。
これは私のために働いた:
iOS SDK 9.3
app.xcodeprojのビルド設定に 有効なアーキテクチャ:armv7 armv7sビルドアクティブアーキテクチャ:いいえ
きれいにして造ってください、私のために働きました。
ターゲットのビルド設定で-ObjC
をOther Linker Flags
に設定すると、問題が解決しました。
場合によっては、.hファイルにもう1つインターフェイスを定義しても、これらすべてのインターフェイスを実装していないと、このエラーが発生します。
リンカは.mファイルで実装を見つけることができないので、あなたはすべてのインタフェースに対してあなたの.mファイルでそれを実装する必要があります。
このエラーを解決するには
1.mファイルで、各インタフェースの実装を指定します。 2.再構築
morisunshine answerが正しい方向を向いていたので、彼の答えを少し微調整してiOS8.2に関する私の問題を解決した。彼に感謝します。
私はそれを設定することでこの問題を解決しました:
ARCHS = armv7
VALID_ARCHS = armv6 armv7 armv7s arm64
BUILD ACTIVE ARCHITECTURE ONLY= NO
以下は、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"
指摘すべきいくつかの点:
上記が助けてくれることを願っています-何度も質問されるにもかかわらず、どこにも明確な指示がなかったようですが、恐れないで、GPUImageは間違いなくarm64アーキテクチャで動作します!
私の場合は、探していた
C++ Standard Library
をクリックし、libc++
が選択されたものであることを確認してください。
私の場合(Xcode 9)では、TesseractOCRiOS
を使用してこのエラーを解決するソリューションはありません。何時間もの試行錯誤の末、私は良い解決策を思いつきました。 Podfile
から'pod 'TesseractOCRiOS', '~> 4.0.0'
を削除し、pod install
を実行します。そして、pod 'TesseractOCRiOS', '~> 4.0.0'
をPodfile
に戻して再度pod install
を実行します。
バング!できます!
私は、iOS用のxcode 7.2でopencv 2.4.9を使用していて、上記のエラーが発生しました。また、オフラインのopencvフレームワークではなく、podインストールでopencvを使用してエラーを解決します。
下記のopencv podテキストを追加して試してみることができます。オフラインのopencvフレームワークを使用している場合は削除してください。
ポッド「OpenCV」、「2.4.9」
この問題は、Podfileとpod install
を介してポッドをインストールした後に発生しました。さまざまな修正を試した後、ついにPodを手動でインポートし(必要なファイルを自分のプロジェクトにドラッグして)、問題を解決しました。
私はこの問題を克服するために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)に設定してください。
私の問題は、私がすでに自分のプロジェクトにいくつかのFacebook SDK(FBSDKLoginKitとFBSDKCoreKit)を持っているということでした。
私はもう1つのSDK(FBSDKShareKit)を必要とし、それをインポートしただけなので、「arm 64用の未定義シンボルアーキテクチャ」を与えました。
FBSDKShareKitはFBSDKCoreKitの更新版に依存しているので、他のフレームワークを更新することで、すべてがまたうまくいった。
私は同じ問題に直面しました。私がここで見つけた解決策: なぜリンカが静的ライブラリとエラーをリンクするのか?iOS
$(TOOLCHAIN_DIR)/ usr/lib/Swift/$(PLATFORM_NAME)をライブラリ検索パスに追加問題を修正しました。
C++コードを呼び出すc ++で記述された.framework/.aを使用する場合、ファイルを.mmファイルに変更する必要があります。
私はその中で半日を失いました...
"Security.framework"を追加すると、私にはうまくいきました。
アーキテクチャとリンカの設定が良ければ、hファイルを調べてください。私の問題は同じエラーでしたが、私はhファイルを再構築し、私はexternステートメントを削除しました。他のm個のファイルがその変数を使用していたため、リンカエラーが発生しました。
私はこの問題を私の ' 包括的フレームワーク 'と持っていましたが、私は2番目のレベルのフレームワークを構築していました。
私は最初のレベルのフレームワークの 'Generic iOS Device'用のBuild Schemeを変更することでこれを解決しました。私はこれが_CodeSignatureを変えるだろうと思います、それは私が私の全体の「アンブレラフレームワーク」をGitHubにプッシュするときに違いを見ました。
これは古い枝です。しかし、最新のCocoaPodsバージョン(1.0.0)に移行し、すべてのPODを再インストールしようとした後に、同じ問題が発生し始めました。 "Missing symbols for armv64"リンカエラーが発生しました。奇妙なことに、私は以下のステップを実行することによってそれを解決しました:
すべてのポッドを削除する(pod init、pod install)
逆の順序でPodファイルを書き換えます(POD "Mixpanel"、POD "Intercom"の代わりに、私は使用しました:POD "Intercom"、POD "Mixpanel")。
ポッドインストール
ポッドファイル内の依存関係の順序を逆にしてポッドを再構築すると、問題が解決しました。