2011-12-09 22 views
31

Estoy tratando de programar una clase de gráfico usando una lista adyacente de un ejemplo en mi libro de texto C++, y cuando compilo usando este comando: Código: g ++ -o prog program.cpp ... obtengo el siguiente error:¿Qué significa el error en tiempo de compilación "Símbolos no definidos para la arquitectura x86_64"?

Undefined symbols for architecture x86_64: 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

... ¿qué significa esto en el mundo? Puede que sea un problema con mi código, pero creo que puede ser más profundo que eso, porque he obtenido este mismo error aparentemente inexplicable para varios proyectos diferentes, muchos de los cuales se resolvieron de diferentes maneras y, lamentablemente, completamente por accidente.

He leído en algún lugar que puede tener que ver con si estoy usando bibliotecas de 32 bits o de 64 bits, y que las etiquetas -m32 o -m64 pueden necesitar ser utilizadas, pero no estoy seguro si esto aplica aquí. Curiosamente, cuando intentado añadir la etiqueta -m64 Tengo el mismo error exacto, pero cuando he intentado usar la etiqueta -m32 Tengo el mismo error, excepto que dijo

Undefined symbols for architecture i386: 
    "_main", referenced from: 
     start in crt1.10.6.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

lugar.

Principalmente solo quiero saber qué demonios está diciendo el error. Estoy acostumbrado a depurar errores de tiempo de compilación que dan una línea específica en el código, etc., pero no puedo discernir nada de eso a partir de esto. ¿Algunas ideas?

Si sirve, estoy utilizando una Macbook a finales de 2008 con Intel Core 2 Duo (64 bits) y estoy ejecutando OS X Lion (10.7.2), que creo que es la última versión . Además, estoy usando gcc versión 4.2.1.

+0

¿Su proyecto tiene archivos .hpp? Consulte http://stackoverflow.com/questions/1757509/precompiled-headers-and-compiling-universal-objects-on-osxq – erturne

+4

¿su programa tiene la función main()? – springrider

Respuesta

33

Cuando compila el archivo, el compilador invoca al vinculador que intenta generar un ejecutable. Pero no puede porque no proporcionó una función llamada main que es la función que se ejecutará cuando se inicie su programa.

O bien no desea ejecutar el enlazador porque desea compilar varios archivos por separado y luego combinarlos. En ese caso, use el indicador -c para indicar al compilador que omita la etapa de enlace.

O bien desea ejecutar el archivo compilado. Luego debe implementar la función main.

+2

¿Dónde usarías esta bandera -c? ¿Puede dar un ejemplo? – Goldname

Cuestiones relacionadas