2012-03-27 23 views
5

私はCを学び始め、そして私のハローワールドプログラムを書いた:奇妙なCコンパイラ、エラーを取得し、「LD:_main重複シンボル」

#include <stdio.h> 
main() 
{ 
    printf("Hello World"); 
    return 0; 
} 

私は、コードを実行すると、私は本当に長いエラーが発生します。

Apple Mach-O Linker (id) Error 

Ld /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug/CProj normal x86_64 
     cd /Users/Solomon/Desktop/C/CProj 
     setenv MACOSX_DEPLOYMENT_TARGET 10.7 
     /Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug -F/Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug -filelist /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/Objects-normal/x86_64/CProj.LinkFileList -mmacosx-version-min=10.7 -o /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Products/Debug/CProj 

    ld: duplicate symbol _main in /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/Objects-normal/x86_64/helloworld.o and /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/Objects-normal/x86_64/main.o for architecture x86_64 
    Command /Developer/usr/bin/clang failed with exit code 1 

私はデベロッパーツールを再インストールする必要があります私はXcodeの

を実行しているのですか?

+0

いいえ、私は同じ正確なエラーを受け取ります – Billjk

+1

このコードをコンパイルするために使用しているコマンドラインは何ですか?あなたのコマンドラインには、両方とも 'main'実装を含む2つの.cファイルが含まれている可能性があります。特に、エラーメッセージは、 'helloworld.c'と' main.c'を1つの実行可能ファイルにコンパイルしようとしているようです。 –

+0

main()を宣言する2つの異なるファイルをリンクしています。リンクされているファイルが存在しないかどうかを調べるには、次のようにします。/Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/オブジェクト - ノーマル/ x86_64/CProj.LinkFileList –

答えて

14

あなたは(特にラインがld: duplicate symbol _main in ...開始)エラーメッセージを読む場合、あなたはそれが約2 main機能、1つの文句だということに気づくでしょう:

......blah blah blah/helloworld.o 

との他:

......yada yada yada/main.o 

これは、あなたのプロジェクトが何とか失敗したことを意味します。 mainを含む2つの別々のソースファイルがあるか、Xcodeが自動的に1つを提供しています。

ただ修正する必要があります。ここで

+0

素晴らしいans @ paxdiablo、あなたは私の時間を節約します。 –

12

は、そのメッセージを解釈する方法は次のとおりです。

Apple Mach-O Linker (id) Error

エラーは、これはXcodeのは、リンクのステップを実行するために実行したコマンドである

Ld /Users/ …
cd …
setenv …
/Developer/…

を発生しました。ほとんどの場合、無視して次の空白行をスキップすることができます。

ld: duplicate symbol _main in /Users/…/helloworld.o and /Users/…/main.o for architecture x86_64

これは実際のエラーメッセージです。 _mainシンボルが重複しています(ファイルhelloworld.oに1つ、main.oに1つ)。つまり、両方ともmainと呼ばれる機能を使用する必要がありますが、これは許可されていません。そのうちの1つはhelloworld.cで、もう1つはmain.cです。これらの関数またはファイルのいずれかを削除すると、エラーは消えてしまいます。

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

これは、実行されたコマンドXcodeの終了コードを示します。エラーメッセージよりもあまり役に立ちません。エラーをリンクするために1以外のものは見たことがありません。

10

この問題も同様です。 「ターゲットメンバーシップ」では、実行したいファイルにチェックを入れてください。実行したくない他のファイルでこれを取り消してください。その後、もう一度試してください。

enter image description here

+0

これは、main.cに関連付けられたtargeファイル以外のすべてのtargeファイルのチェックを外した後、私のために働きます。ありがとう。 – xslittlegrass

+0

これも私にとってはうまくいったが、同じフォルダからすべてのオブジェクト(.o)ファイルを削除するほうがよいということに気付いた。重複が発生し、他の.cファイルをデバッグする場合は、メンバーシップを削除しないでください。 –

2

あなたの関数呼び出しの複製コピーを作成し#include "...filename..."を持っていた場合は、このエラーメッセージを受信して​​いる可能性があることを覚えておくことも重要です。しかし、あなたの場合、それはそうではありません。

#includeは、#includeがあるコードのコピーをコピーして貼り付けることを覚えておいてください。

+1

アレックスあなたの答えは、私はviewController.hファイルの代わりに私のviewController.mをインポートした私を助けた –

関連する問題