traduccion trabajo linkers app c linker

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