2012年12月25日火曜日

[iOS]ld: duplicate symbol

XCode4.5.2のビルドで以下のエラーが発生した。


duplicate symbol _OBJC_CLASS_$_PhotoViewController in:
    /Users/abrain/Library/Developer/Xcode/DerivedData/hogehoge-/Build/Intermediates/hogehoge.build/Debug-iphonesimulator/hogehoge.build/Objects-normal/i386/hogehogeAppDelegate.o
    /Users/abrain/Library/Developer/Xcode/DerivedData/hogehoge/Build/Intermediates/hogehoge.build/Debug-iphonesimulator/hogehoge.build/Objects-normal/i386/RootViewController.o
ld: 88 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

実際はもっと長いエラーだった。
duplicate symbol(PhotoViewControllerのシンボルが重複しています)
つまりクラス定義を2重にやってるらしいんだが、PhotoViewControllerに悪い場所はない。

いろいろやったところPhotoViewControllerを呼び出しているところが、
#import "PhotoViewController.m"
となっていた、
PhotoViewController.mからヘッダーを呼び出してるので2重定義となっている。
#import "PhotoViewController.h"
と修正してビルド完了。

XCodeうんうんじゃなくてC言語共通のエラーね。
コード補完で間違って.mを選択してしまったようだ。