2012-03-27 26 views
5

Acabo de empezar a aprender C, y escribí mi programa hola mundo:extraño compilador de C, recibiendo un error "ld: Símbolo duplicado _main"

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

Cuando ejecuto el código, aparece un muy largo de error:

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 

me postulo xCode

¿Debo volver a instalar DevTools?

+0

No, recibo el mismo error exacto – Billjk

+1

¿Cuál es la línea de comando que está utilizando para compilar este código? Lo más probable es que su línea de comando incluya dos archivos .c que contengan una implementación 'main'. Específicamente, el mensaje de error parece indicar que está intentando compilar 'helloworld.c' y' main.c' en un ejecutable. –

+0

Está enlazando dos archivos diferentes que declaran main(). Consulte a continuación para ver si hay algún archivo vinculado que no pertenezca: /Users/Solomon/Library/Developer/Xcode/DerivedData/CProj-cwosspupvengheeaapmkrhxbxjvk/Build/Intermediates/CProj.build/Debug/CProj.build/ Objects-normal/x86_64/CProj.LinkFileList –

Respuesta

14

Si leer los mensajes de error (en concreto la línea de salida ld: duplicate symbol _main in ...), se dará cuenta de que se queja de dos main funciones, una en:

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

y el otro en:

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

Eso significa que su proyecto está estropeado de alguna manera. O tiene dos archivos de origen separados que contienen main o Xcode lo está suministrando automágicamente.

Solo necesita arreglar eso.

+0

great ans @paxdiablo, ahorras mi tiempo. –

12

Aquí es cómo interpretar ese mensaje:

Apple Mach-O Linker (id) Error

ha producido un error

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

Este es el comando que ejecuta Xcode para realizar la etapa de vinculación. Casi siempre puedes ignorarlo y saltarte la siguiente línea en blanco.

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

Éste es el mensaje de error real. Le dice que tiene símbolos _main duplicados, uno en el archivo helloworld.o y otro en main.o. Esto significa que debe tener funciones que se llaman main, lo cual no está permitido. Uno de ellos está en helloworld.c y el otro en main.c. Si elimina una de estas funciones o archivos, el error desaparecerá.

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

Esto le indica el código de salida del comando Xcode realizado. Es menos útil que el mensaje de error, y nunca he visto nada más que 1 para vincular errores.

10

Encuentro este problema también. En "Membresía objetivo", simplemente marque el archivo que desea ejecutar. Desate esto en otros archivos que no desea ejecutar. Vuelva a intentarlo.

enter image description here

+0

Esto funciona para mí, después de desmarcar todos los archivos de destino, excepto el asociado a main.c. Gracias. – xslittlegrass

+0

Esto funcionó para mí también, pero me di cuenta de que la mejor solución era eliminar todos los archivos de objetos (.o) de la misma carpeta. Causan la duplicación y si desea depurar los otros archivos .c no debe eliminar su membresía. –

2

También es importante recordar que usted podría haber recibido este mensaje de error si has tenido una #include "...filename..." que creó una copia duplicada de sus llamadas a funciones. Sin embargo, en tu caso, eso no es probable.

recuerde que #include esencialmente solo copia y pega una copia de su código donde se lleva a cabo el #include.

+1

Alex su respuesta me ayudó. Importé mi viewController.m en lugar del archivo viewController.h –

Cuestiones relacionadas