2011-08-02 13 views
10

XcodeでシンプルなMac Objective-Cアプリケーションを作成しようとしました。その機能が限られているため、非常に実用的なアプリケーションではありません。私は、メニュー項目がクリックされたときにポップアップするPreferencesウィンドウでアプリケーションを少し拡張しようとしていました。終了コード1でコマンド/開発者/ usr/bin/clangに失敗しました

私はmenアイテムを制御するためのファイルを作成し、それをクリックすると、ポップアップするようにしました。これはすべて正常に動作し、新しいウィンドウがポップアップします。ペン先にスライダやテキストフィールドなどを置き、それらをアクションに関連付けました。そのすべてがうまくいきました。

問題は、アプリケーションでユーザーの選択肢を使用できるようにファイルをルートコントローラにインポートしようとしたときに発生しました。私のプロジェクトのフォローに

Ld "/Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug/SimpleScoreKeeper Mac.app/Contents/MacOS/SimpleScoreKeeper Mac" normal x86_64 cd "/Users/myusername/Dropbox/iphone app/SimpleScoreKeeper Mac" setenv MACOSX_DEPLOYMENT_TARGET 10.6 /Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -L/Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug -F/Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug -filelist "/Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Intermediates/SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/SimpleScoreKeeper Mac.LinkFileList" -mmacosx-version-min=10.6 -framework Cocoa -o "/Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Products/Debug/SimpleScoreKeeper Mac.app/Contents/MacOS/SimpleScoreKeeper Mac"

ld: duplicate symbol _addScores in /Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Intermediates/SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/Prefrences.o and /Users/myusername/Library/Developer/Xcode/DerivedData/SimpleScoreKeeper_Mac-bjvjeiybvmwfjpfilvnpezarwkml/Build/Intermediates/SimpleScoreKeeper Mac.build/Debug/SimpleScoreKeeper Mac.build/Objects-normal/x86_64/RootController.o for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) Command /Developer/usr/bin/clang failed with exit code 1

(おそらく)関連ファイル:このすべてとともに

Command /Developer/usr/bin/clang failed with exit code 1 

は、私は次のコンパイラエラーを得ました。

RootController.h - All the interface declarations for stuff in the MainMenu.xib window 
RootController.m - Where I need to import the files to 
MainMenu.xib - The nib owned by the RootController class 
Preferences.h - A file I'd want to import, but it won't work. 
Preferences.m - A file I'd (maybe) want to import, but it won't work. 
Preferences.xib - The nib owned by the Preferences class. 
PreferencesMenuController.h - Where I declare the clickPreferences action. (Liked to MainMenu.xib) 
PreferencesMenuController.m - Where I say that clickPreferences opens up Preferences nib. (Linked to MainMenu.xib) 

このエラーが発生する理由はありますか?私がインポートしているクラスで何かする必要がありますか?きれいに詳細を教えてください、私は言語に新しいですsomight特定のことをする方法を知らない。私が明確にする必要があるものがあれば、教えてください。

編集: ここではインポートできないファイルのコードです。

#import "Preferences.h" 

@implementation Preferences 

int addScores; 

- (IBAction)addScoresToggled 
{ 
    NSLog(@"addScores was toggled."); 
} 


- (id)initWithWindow:(NSWindow *)window 
{ 
    self = [super initWithWindow:window]; 
    if (self) { 

    } 

    return self; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

- (void)windowDidLoad 
{ 
    [super windowDidLoad]; 
} 

@end 

答えて

17

このエラーは、誤ってヘッダーファイルではなく実装ファイルを含むこともあります。例えば代わりの#importの#importを「MyClass.m」「MyClass.h」

9

これは_addScoreが複数回ファイルを持って、あなたのプロジェクトでld: duplicate symbol _addScore

理由です。プロジェクト階層を確認してください。

+0

私にはアンダースコアが何もありません。正確にはどういう意味ですか?私がインポートすることができない.mファイルへのコードをheresします。編集:コメントに改行がないので、質問の最後にコードを投稿します。 – ObjectiveProgrammer

+0

'#import" Preferences.h " @implementationプリファレンス int addScores; - (IBAction)addScoresToggled { NSLog(@ "addScoresがトグルされました。「); } - (ID)initWithWindow:(NSWindowの*)ウィンドウ { 自己= [スーパーinitWithWindow:ウィンドウ]; 場合(自己){ } 戻り自己; } - (ボイド)のdealloc {[スーパーのdealloc];} - (ボイド)がwindowDidLoad {[スーパーwindowDidLoad];} @end ' – ObjectiveProgrammer

+1

おそらく遅くなりますが、" int addScore "は静的スコープにあります。したがって、それが他の場所(またはプロジェクトに複数回含まれているファイル)に含まれていると、重複してしまうでしょう。 – GtotheB

0

最近このエラーが発生しました。 2つの異なるファイルから同じ.hファイルをインポートしていますか?これは私にとってこのエラーの原因となりました。

+0

それ自体は問題ではないはずですが、あなたが含んでいたヘッダーファイルでもっと間違ったように聞こえます(例えば、ヘッダーファイルの変数をインスタンス化する)。 – drfrogsplat

0

あなたは変数addScoreが複数のファイルにアクセスできるようにしたい場合は、あなたのように1つの.mファイルでそれを定義する必要があります。

int addScore; 

として関連付けられた.hファイルで宣言:宣言で「のextern」キーワードを残した場合、コンパイラはすべてのファイルにaddScoreの再定義としての.hがインポートされていることを見ている

extern int addScore; 

/に含まれています。それはあなたが見ているエラーにつながるでしょう。

3

まったく同じエラーを受け取った後、私は何とか私のプロジェクトで同じ名前の2つの.hファイルを取得していたことに気付きました。参照を削除するだけでなく、プロジェクトのフォルダから複製を削除することで、私の問題が解決されました。

+0

同様のことです。私はプロジェクトで2つの.hファイル参照を持っていました。そこで私は1つのリファレンスを削除しました。 – utsabiem

+0

同じエラーが発生しました。最後にインポートしたファイルを検索した後、重複した項目が見つかりました。 –

0

同じアプリケーション識別子を持つ2つのプロジェクトを実行した後、同じ問題が発生しました。

(アカウント名と> yourlogin <を置き換える)を除去した後:

project.xcworkspace/xcuserdata/<yourlogin>.xcuserdatad/UserInterfaceState.xcuserstate

が、それはシミュレータの下で走り始めていますが、まだないデバイス上で、私は開いているすべてのプロジェクトを閉じて、新しいものを作成し、そこにコピーされたファイル、そして最後にそれは働いた!

0

RestKitを使用しているときに同じエラーが発生しました。私はRestKitターゲットを選択し、それをクリーニング/構築しました。私の主なターゲット(私のアプリケーション)を選択し、それをクリーニング/構築しました。それは私のためにそれを固定した。 64 bitIntelへ

0

私はXcodeの4.3と4.4、 の下でプロジェクトをアーカイブし、最終的に私は標準(64分の32ビットIntel)からの切り替えでこのエラーを終わったとき、私はこの種のエラーを満たす

2

私はが誤って.hファイルの代わりにクラスの.mファイルをインポートしたため、今すぐこの問題に遭遇しました。

もしこの問題が突然現れたら、あなたが最近追加した行を考えてみてください。(もっと良いのは、gitでgrepを実行してください!)

0

私は別の原因がありました。Xcode 4.4を使用すると、最小要件が10.6の場合、展開ターゲットは10.4に設定されました。それは私のために解決した。

1

select demo.xcodeproj、私が誤って製品クリックしたときに、私は、このエラーに遭遇したproject.xcworkspaceという名前のファイルであり、f xcuserdata

0

削除、パッケージの内容を表示する代わりに - 製品の>テスト、 - > [ファイル名を指定して実行。私はちょうどプロダクト - >クリーニングをクリックしてプロジェクトをきれいにしました、そして、エラーはなくなりました。インポートしているファイルへの複数の潜在的なパスがある場合、これが発生する可能性があります

0

複製したり、あいまいなヘッダーまたは実装ファイル

。あなたがMyClass.hをインポートするが、あなたのプロジェクト

0

私の溶液中のMyClass.hの2つのインスタンスがある場合 例えば:

は、私は私のプロジェクトでは、いくつかの.hと.mファイルのファイルをインポートされています。私のクラスのどれも使っていない。 だから私はそれらをファインダーから取り除いた。上記のエラーが発生しました。

私はプロジェクト設定/フェーズをビルドしなければならなかった=>また、それらのファイル参照を削除します。彼らは赤色であった。 Xcodeからではなく、ファインダから削除されたためです

関連する問題