Xcode architectureエラー

どうもデータベース消す前のキーワードで検索して迷い込んでくる人がおおいみたいなので。 お役にたつかはわかりませんが。

エラー内容はコレ

Apple Mach-O Linker Error Undefined symbols for architecture armv7: Undefined symbols for architecture armv6:

結構多いのよね。このエラー。 得に外部ライブラリとかをリンクした場合。

ライブラリの対応アーキテクチャを確認する

そもそも対応していないライブラリを使っていたらエラーがでて当たり前。

まず自分のプロジェクトに入れているライブラリのアーキテクチャを調べる。 Xcode4では(Xcode3はたしかbuildディレクトリがあったはずだから4だけだと思うんだけど)ビルドされたファイル軍は専用の名前が割り振られたところ?に入るので、探すより、

左のファイルビューから 右クリック⇒Show in Finder で、開いた方がてっとり早い。 自分で作ったライブラリではなく、フレームワークとしてインストールしたものについては、インストールしたフォルダで。

ファイルを選択して情報を見るからパスを取得。

いろいろ探しまわるよりこれが一番確実。

赤い部分(パス)を選択してターミナルへドラッグ&ドロップ。 ライブラリがあるフォルダに移動。


$ cd [さっきのパス] $ file [調べたいライブラリ]

current ar archive random libraryと出てると、たぶんarmv7のみになってるかも?armv6,armv7と両方でてきた場合は両方に対応しているみたいな。 ちなみに画像の「*」はそのフォルダのファイル全部って意味です。一応書いといてみる。

自分のビルド設定と違っていた場合は、ライブラリの設定を変更してビルドし直す必要があるかも。
ファイルビューからプロジェクトを選んで、 ターゲット選択⇒Build Settings内の Architecturesで設定してビルドしなおせばおk!

また、Build Active Architecture OnlyはNOにしておいた方がいいです。


これでたいていはなおるはず。

ただ、C/C++のライブラリを使ってる場合とかは勝手が違うことがある。 たとえばOpenCVとか。 私がつまったのはOpenCV

どうも他に必要なものがあるみたい。それはSTLのライブラリ。 あと、zlibも必要。

Undefined symbols for architecture armv7: Undefined symbols for architecture armv6:

この両方が出てくる場合はこっちを疑った方がいいです。

上記と同じBuild Settingの横!Build PhasesのLink Binary With Librariesから

・libz.dylib ・libstdc++.dylib

の2つを入れるといけました!その他、C/C++のライブラリを使っている場合、必要になってくるライブラリがあるかもしれないから、そのあたりをみるといいかもです。

これだけに限らず、いろいろ原因があるようです。 ・Copy Bundle Resourcesに.mファイルが入ってしまってたり ・CoreData使ってるのにCoreData.framework入ってなかったり(CoreData系はいろいろこのエラーが出ることが多いみたい

難しいなぁ。。。。

まぁ以上! がっつり苦労したところですたー!