2012-03-27 2 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 

내가 엑스 코드 내가 DevTools로 다시 설치해야

실행하고?

+0

아니요, 정확한 오류가 발생했습니다. – Billjk

+1

이 코드를 컴파일하는 데 사용하는 명령 줄은 무엇입니까? 기회는 명령 줄에 두 개의 .c 파일이 포함되어 있는데 두 파일 모두'main' 구현을 포함하고 있습니다. 특히, 오류 메시지는'helloworld.c'와'main.c'를 하나의 실행 파일로 컴파일하려고 시도하고있는 것으로 보입니다. –

+0

main()을 선언하는 서로 다른 두 파일을 연결하고 있습니다. 다음을 살펴보고 속하지 않는 파일이 있는지 확인하십시오. /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/ Objects-normal/x86_64/CProj.LinkFileList –

답변

14

당신이 (특히 라인이 ld: duplicate symbol _main in ... 시작) 오류 메시지를 읽을 경우, 당신은 약 2 main 기능, 하나 불평 것을 알 수 있습니다 :

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

과의 다른 :

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

즉, 프로젝트가 어떻게 든 엉망이 됐음을 의미합니다. main을 포함하는 두 개의 개별 소스 파일이 있거나 Xcode가 자동으로 하나를 제공합니다.

단지 수정해야합니다.

+0

위대한 ans @ paxdiablo, 당신은 내 시간을 절약 할 수 있습니다. –

12

여기서 그 메시지를 해석하는 방법 :

Apple Mach-O Linker (id) Error

오류 이것은, 연결 단계를 수행하도록 실행되는 명령이다 엑스 코드

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

일어났다. 거의 항상 무시하고 다음 빈 줄을 건너 뛸 수 있습니다.

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

이것은 실제 오류 메시지입니다. _main 개의 심볼이 중복되어 있음을 알 수 있습니다. 하나는 helloworld.o이고 하나는 main.o입니다. 즉, main이라는 두 가지 기능을 사용할 수 없다는 의미입니다. 그 중 하나는 helloworld.c이고 다른 하나는 main.c입니다. 이러한 기능이나 파일 중 하나를 삭제하면 오류가 사라집니다.

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

이렇게하면 수행 된 Xcode 명령의 종료 코드가 표시됩니다. 오류 메시지보다 덜 도움이되며 오류 연결에 1 이외의 다른 것을 본 적이 없습니다.

10

나는이 문제도 만난다. "대상 멤버십"에서 실행하려는 파일을 선택하십시오. 실행하고 싶지 않은 다른 파일에서이를 실행 취소하십시오. 그런 다음 다시 시도하십시오.

enter image description here

+0

main.c와 관련된 파일을 제외한 모든 targe 파일의 선택을 취소하면 저에게 적합합니다. 감사. – xslittlegrass

+0

이것은 나에게도 도움이되었지만 같은 폴더에서 모든 개체 (.o) 파일을 제거하는 것이 더 나은 해결책임을 깨달았습니다. 그것들은 중복을 야기하고 다른 .c 파일들을 디버그하고자한다면 그들의 멤버쉽을 제거하면 안됩니다. –

2

당신이 당신의 함수 호출의 중복 사본을 만든 #include "...filename..." 있던 경우에이 오류 메시지가받은 수 있다는 것을 기억하는 것이 중요하다. 그러나 귀하의 경우에는 그럴 가능성이 없습니다.

#include#include이있는 코드 사본을 복사하여 붙여 넣는 것임을 기억하십시오.

+1

알렉스 귀하의 대답은 내가 viewController.h 대신 내 viewController.m 가져온 도움이되었습니다. –