trabajo - C Linking Error: referencia indefinida a ''main''
linker traduccion (4)
He leído las otras respuestas sobre este tema y, desafortunadamente, no me han ayudado. Estoy intentando vincular varios programas en C, y recibo un error en la respuesta:
$ gcc -o runexp.o scd.o data_proc.o -lm -fopenmp
/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start'':
(.text+0x20): undefined reference to `main''
collect2: ld returned 1 exit status
make: * [runexp] Error 1
Tengo exactamente una función principal y está en runexp. La forma es
int main(void) {
...;
return 0;
}
¿Alguna idea sobre por qué podría obtener este error? ¡Gracias!
Debe proporcionar el nombre del archivo de salida después de la opción -o
. En su caso, runexp.o
se trata como nombre de archivo de salida, no como archivo de objeto de entrada y, por lo tanto, su función main
no está definida.
Está sobrescribiendo su archivo de objeto runexp.o
ejecutando este comando:
gcc -o runexp.o scd.o data_proc.o -lm -fopenmp
De hecho, el -o
es para el archivo de salida . Necesitas ejecutar:
gcc -o runexp.out runexp.o scd.o data_proc.o -lm -fopenmp
runexp.out será su archivo binario.
Generalmente compilas la mayoría de los archivos .c de la siguiente manera:
gcc foo.c -o foo. Puede variar dependiendo de lo que #incluye que usaste o si tienes algún archivo .h externo. Generalmente, cuando tienes un archivo C, se parece a lo siguiente:
#include <stdio.h>
/* any other includes, prototypes, struct delcarations... */
int main(){
*/ code */
}
Cuando obtengo una ''referencia indefinida a main'', generalmente significa que tengo un archivo .c que no tiene int main()
en el archivo. Si aprendió java por primera vez, esta es una forma comprensible de confusión, ya que en Java, su código generalmente se parece a lo siguiente:
//any import statements you have
public class Foo{
int main(){}
}
Aconsejaría mirar para ver si tiene int main()
en la parte superior.
No está incluyendo el archivo C que contiene main()
al compilar, por lo que el vinculador no lo ve.
Necesitas añadirlo:
$ gcc -o runexp runexp.c scd.o data_proc.o -lm -fopenmp