【クソ食らえ】CocoaPodsとApple Mach-O Linker Errorとlinker command failed with exit code 1でどハマり

  • 96
    いいね
  • 0
    コメント

で、結局何したら直るの

ググってもググっても、何やっても消えない「Apple Mach-O Linker Error」と「linker command failed with exit code 1」のお話です。きっと、ここで書いている内容をやってみても、直らないかもしれない。けど、参考になるかもしれない。やったことと、参考にしたサイトをまとめておきます。

※私の体験で決定的だった解決策は、一番下に書いておきます。

前提条件

  • CocoaPodsを使用したプロジェクト
  • ライブラリへのパスは間違っていない(はず)
  • CocoaPodsはとりあえずは最新版にした

1. そもそも……開くファイル間違えていないか

CocoaPodsを使用しているプロジェクトでは、「.xcodeproj」のファイルから開くとビルドできません。「.xcworkspace」を開きます。ここがまず第一のハマりどころ。

参考:初めてのCocoaPodsでLinker command failed with exit code 1でハマる

2. pod update、pod install したか

他人が作業を進めているブランチをcheckoutした場合に、よく遭遇します。まずは落ち着いてpod installまたはpod updateしましょう。ビルドに必要なライブラリをローカルに導入します。

3. 不要な“\”が入っていたりしないか、$(inherited)になっているか

pod installをすると、下のようなメッセージが出てきます。

[!] The `[プロジェクト名]` target overrides the `OTHER_LDFLAGS` build setting defined in `[GHUnitのパス]'. This can lead to problems with the CocoaPods installation
    - Use the `$(inherited)` flag, or
    - Remove the build settings from the target.

OTHER_LDFLAGSの設定がオーバーライドされてますよ、という話のようで、たまに問題を起こすから、「$(inherited)」にしておくと良いよ、という話です。
この設定を確認するには、Project Navigatorからプロジェクトを選択し、Build Settingの一覧で「OTHER_LDFLAG」で検索します。

参考:

4. 【決定打】ビルドするアーキテクチャの設定を、プロジェクトとPodsともに揃える

このエラーを抜け出す決定打だったのが、この設定でした。下に参考したサイトを挙げておきます。

Podsとプロジェクトの、「Build Active Architecture Only」の項目を、どちらもYesまたはNoに統一してくださいということだそうです。CocoaPodsのTroubleShootingにも書いてありました……。

Build Active Architecture Onlyのチェック箇所画像

Podsの方を選択した時も、確認する場所は2箇所!
どちらもNoになっていると思っても、Podsの方がYesになっていることがよくあるので、気をつけてください!
スクリーンショット 2016-07-25 20.06.21.png

「Build Active Architecture Only」の設定は、必要なアーキテクチャのみでビルドするかどうかを設定する項目です。例えば、プロジェクトが「no」、Podsが「yes」のように異なった設定になっていると、ビルド時に「ライブラリが足りません、ありません」とエラーが発生するようです。

そんなの気付かないよ……> <

参考:


以上が、私の「Apple Mach-O Linker Error」と「linker command failed with exit code 1」と戦った、記録です。戦いの参考になればと思います。