2012年4月10日火曜日

duplicate symbol エラー


ld: duplicate symbol _OBJC_METACLASS_$_Person in
....
clang: error: linker command failed with exit code 1 (use -v to see invocation)

同じ名前のクラス、変数、メソッドなどが使われている場合に発生します。変数、メソッドの場合はソース編集中に警告が出るので悩まされることはあまりないと思いますが、クラスの場合はビルドするとエラーが出ます。

既存のCore DataのNSManagedObjectサブクラスを更新するときなどに既存のソースと異なる場所に出力すると、同名クラスがふたつプロジェクトに追加され、このエラーが発生します。

誤った場所に追加したソースをXcodeで削除します。

また、.hをimportすべきところを、誤って.mをimportしても発生します。importの場所に.mがコピーされ、同じクラスが二度コンパイル対象となってしまうためです。

Create NSManagedObject Subclass... 実行後この状態になったが余分なソースが見当たらないという事態が発生しました。プロジェクトのBuild Phase/Compile Sourcesをみると当該ソースが赤字になってます。
当該ファイルをXCodeでdelete/Remove Referenceを行い、再度Add Files to ...でプロジェクトに追加することで回復しました。



0 件のコメント: