2012-03-27 8 views
5

Ich habe gerade angefangen C zu lernen, und mein Hallo Welt Programm geschrieben:Weird-C-Compiler, erhalte eine Fehlermeldung „ld: doppeltes Symbol _main“

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

Wenn ich den Code ausführen, habe ich eine wirklich lange Fehlermeldung erhalten:

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 

I xCode leite

Soll ich DevTools neu installieren?

+0

Nein, ich bekomme den gleichen genauen Fehler – Billjk

+1

Was ist die Befehlszeile, die Sie verwenden, um diesen Code zu kompilieren? Die Befehlszeile enthält zwei .c-Dateien, die beide eine 'main'-Implementierung enthalten. Insbesondere scheint die Fehlermeldung anzuzeigen, dass Sie versuchen, 'helloworld.c' und' main.c' in eine ausführbare Datei zu kompilieren. –

+0

Sie verknüpfen zwei verschiedene Dateien, die beide main() deklarieren. Sehen Sie im Folgenden nach, ob Dateien verknüpft sind, die nicht dazugehören: /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/ Objects-normal/x86_64/CProj.LinkFileList –

Antwort

14

Wenn Sie die Fehlermeldungen (speziell die Zeile, die ld: duplicate symbol _main in ...) lesen , werden Sie feststellen, dass es sich um zwei main Funktionen beschwert, ein in:

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

und die andere in:

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

Das bedeutet, Ihr Projekt ist irgendwie vermasselt. Entweder haben Sie zwei separate Quelldateien, die main enthalten, oder Xcode liefert automatisch eine.

Sie müssen nur das beheben.

+0

großartig ans @ paxdiablo, Sie sparen meine Zeit. –

12

Hier ist, wie die Nachricht zu interpretieren:

Apple Mach-O Linker (id) Error

ist ein Fehler aufgetreten

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

Dies ist der Befehl, der den Verknüpfungsschritt Xcode ausgeführt auszuführen. Sie können es fast immer ignorieren und die nächste Leerzeile überspringen.

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

Dies ist die eigentliche Fehlermeldung. Es sagt Ihnen, dass Sie doppelte Symbole , eins in der Datei helloworld.o und eins in main.o haben. Das bedeutet, dass Sie Funktionen haben müssen, die beide main heißen, was nicht erlaubt ist. Einer von ihnen ist in helloworld.c und der andere ist in main.c. Wenn Sie eine dieser Funktionen oder Dateien löschen, verschwindet der Fehler.

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

Dies teilt Ihnen den Exit-Code des Befehls Xcode mit. Es ist weniger hilfreich als die Fehlermeldung, und ich habe noch nie etwas anderes als 1 zum Verknüpfen von Fehlern gesehen.

10

Ich treffe dieses Problem auch. In "Ziel-Mitgliedschaft", kreuzen Sie einfach die Datei an, die Sie ausführen möchten. Deaktivieren Sie dies in anderen Dateien, die Sie nicht ausführen möchten. Dann versuche es noch einmal.

enter image description here

+0

Dies funktioniert für mich, nachdem ich alle Zieldateien außer dem mit dem main.c verbundenen entfernt habe. Vielen Dank. – xslittlegrass

+0

Das funktionierte auch für mich, aber ich erkannte, dass die bessere Lösung darin bestand, alle Objektdateien (.o) aus demselben Ordner zu entfernen. Sie verursachen die Duplizierung und wenn Sie die anderen .c-Dateien debuggen möchten, sollten Sie ihre Mitgliedschaft nicht entfernen. –

2

Es ist auch wichtig zu bedenken, dass diese Fehlermeldung erhalten haben könnte, wenn Sie ein #include "...filename..." haben, die eine Kopie Ihrer Funktionsaufrufe erstellt. In Ihrem Fall ist das jedoch nicht wahrscheinlich.

Denken Sie daran, dass #include im Wesentlichen nur kopiert und fügt eine Kopie Ihres Codes, wo die #include stattfindet.

+1

Alex Ihre Antwort hat mir geholfen Ich habe meine ViewController.m statt ViewController.h Datei importiert –

Verwandte Themen