web-dev-qa-db-ja.com

Objective-Cビルドでシンボルエラーが重複していますか?

Build + debugを押すと、次のエラーが表示されます。

ld: duplicate symbol .objc_class_name_BlogTableItemCell in /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o and /Users/fabian/Development/Workspaces/iphone_experiments/xcode_build_output/MausLog.build/Debug-iphonesimulator/MausLog.build/Objects-normal/i386/BlogTableItemCell-3733583914888A7B.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
57
fabian

コードの異なる場所で同じBlogTableItemCellクラスを2回コンパイルしているようです。これは、次の場合に発生する可能性があります。

  • 同じクラス実装を2つの異なるファイルに配置しました。

  • 実際には、このクラスの実装は1つだけですが、プロジェクト内で、名前がまったく同じクラスを含むフレームワークまたはライブラリもリンクしています。

プロジェクト全体でクラスを見つけて、プロジェクト内で使用できるコピーが1つだけであることを確認してください。

65
Massimo Cafaro

また、誤って#importステートメントのXcodeのオートコンプリートに「.h」ではなく「duplicate」クラスの「.m」ファイルを指定させた場合にも、このエラーが発生する可能性があります。

172
user576924

私にとっては、「共通ブロックなし」を「はい」から「いいえ」に変更します(「ターゲット」->「ビルド設定」->「Apple LLVM-コード生成」の下) enter image description here

39
NeilNie

Constの定義が不十分なため、同様の問題が発生しました。私はヘッダーにconstを定義していました:

int const kCropLocationTop = 1;

これはおそらく複数回インポートされました。修正するには、ヘッダー定義を次のように変更しました。

extern int const kCropLocationTop;

constの割り当てを.mファイルに移動しました。

int const kCropLocationTop = 1;

私と同じように単純なObjective Cの概念を知らない人に役立つことを願っています!

25
jsaven

誤って、ソースファイルがプロジェクト->ビルドフェーズ->ソースのコンパイルに2回含まれていました。それらのいずれかを削除することで問題が解決しました。

18
Pratik

iPhone:シンボルの重複エラー? by user576924

私に正解した。ただし、問題のグレムリンを見つけるには、このZSHスニペットを使用します。

grep "import.*\.m" **/*.[hm]

エラーがどこにあるかすぐにわかります。

18
bradgonesurfing

このエラーの最も一般的な理由は、xyz.hファイルの代わりにxyz.mファイルをインポートすることです。インポートに#import "----.m"などが含まれているかどうかを確認します

8
JohnVanDijk

追加するだけです。 Xcodeを使用してサブクラス化された管理対象オブジェクト(コアデータ)を生成すると、生成されたファイルが複製される場合があります。私にとっての修正は、生成されたファイルを削除して再生成することでした。

4
ChargedNeuron

私は自分でこの問題に遭遇しました。リストについては、別の可能性があります。

プロジェクトファイルのリンク行が重複しています。

誤って行を複製したときに、SVN更新でこのマージ競合が発生しました。

3
DBD

別の考えられる原因をリストに追加しています...実装ファイルに、実装の外部に、同じ名前で複数の定数を誤って作成した可能性があります。

HeaderFileOne.mで

NSString * const kCoolConstant = @"cool";

HeaderFileTwo.mで

NSString * const kCoolConstant = @"cool";

したがって、これらの定数名の1つを変更すると、コンパイルエラーが修正されます。

2
timgcarlson

これは誰かを助けるかもしれない

ViewControllerを複製して名前を変更したため、このエラーが発生しました。そのため、コンパイルするとこのエラーが発生しました。理由は、両方のView Controllerに、同じ名前の「float」変数、つまりクラスレベルで定義した「float padding = 10.0」があったためです。 View Controllerの1つで上記の変数の名前を変更すると、問題が解決しました。

2
Muhammad Nayab

それは私にも起こりました。私の場合、コアデータの自動生成されたクラスの1つ(1つだけ)が2回挿入されました。 Build Phases ... Compile Sourcesを見て重複を見つけました。オカレンスの1つを削除するだけで問題は解決しました。

2
Bruce Cichowlas

私もこの問題に直面しました。私の解決策は、他のクラスの名前と同じ名前を持つグローバル変数の名前を変更することでした。お役に立てれば

2
rgreso

ローカライズ可能なxibファイルで遊んでいたときに同じことが起こりました。誤って2つの実装ファイルを作成してしまい、明らかに私の問題を引き起こしました。同じ間違いをしないで実装ファイルを削除/再作成した後、エラーが修正されました。

0

場合によっては、いくつかの指示に従ってSubversionの新しいバージョンを作成し、このシンボリックリンクの作成を指示しました。

ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/ /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain

今、私は本当にWindowsの男なので、すぐにはわかりませんでしたが、リンクを削除すると(XCodeを再起動した後)修正されました。

rm /Applications/Xcode.app/Contents/Developer/Toolchains/OSX10.10.xctoolchain

ふう。

(私が得た実際のエラーは、ここで説明されているものでした: ビルドエラー重複シンボルarclite.o

0
mrrrk

.m Fileをインポートしていないことを確認してください。私にとってこれは、#import "SchoolCommuterHome.h"の代わりに#import "SchoolCommuterHome.m"を追加したことです。

0
Mehedi Hasan

開発者の1人が「libSoomla *」プロジェクトファイルを2回残しました。重複したsoomlaファイルを削除して再構築しましたが、それで修正されました!

それが役に立てば幸い。

0
Pim de Witte