C Linking Error: undefinierter Verweis auf ‘main’

Lesezeit: 2 Minuten

Benutzeravatar von Nicole
Nicole

Ich habe die anderen Antworten zu diesem Thema gelesen, und leider haben sie mir nicht geholfen. Ich versuche, mehrere C-Programme miteinander zu verknüpfen, und erhalte eine Fehlermeldung als Antwort:

$ 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

Ich habe genau eine Hauptfunktion und die ist in runexp. Das Formular ist

int main(void) {
    ...; 
    return 0;
}

Irgendwelche Gedanken darüber, warum ich diesen Fehler bekommen könnte? Vielen Dank!

  • ist diese Funktion auf globaler Ebene?

    – Ivaylo Strandjev

    9. April 2013 um 14:48 Uhr

  • Ihr GCC-Befehl enthält nicht runexp.c, er wird an runexp.o AUSGEGEBEN – sicher, dass Sie die Quelldatei mit der Hauptmethode einschließen?

    – Morten Jensen

    9. April 2013 um 14:49 Uhr

Sie sollten danach den Namen der Ausgabedatei angeben -o Möglichkeit. In Ihrem Fall runexp.o wird als Ausgabedateiname behandelt, nicht als Eingabeobjektdatei und somit als Ihre main Funktion ist undefiniert.

  • Oder einfach entfernen -o Option und verwenden Sie die herkömmliche ./a.outdas ist ein schöner name 😉

    – Tomasz Gandor

    5. August 2014 um 22:42 Uhr

Sie schließen nicht die C-Datei ein, die enthält main() beim Kompilieren, damit der Linker es nicht sieht.

Sie müssen es hinzufügen:

$ gcc -o runexp runexp.c scd.o data_proc.o -lm -fopenmp

Sie überschreiben Ihre Objektdatei runexp.o indem Sie diesen Befehl ausführen:

 gcc -o runexp.o scd.o data_proc.o -lm -fopenmp

Tatsächlich ist die -o ist für die Ausgang Datei. Sie müssen ausführen:

gcc -o runexp.out runexp.o scd.o data_proc.o -lm -fopenmp

runexp.out werden Sie binäre Datei sein.

Benutzeravatar von Jordan Effinger
Jordan Effinger

Im Allgemeinen kompilieren Sie die meisten .c-Dateien auf folgende Weise:

gcc foo.c -o foo. Sie kann variieren, je nachdem, welche #includes Sie verwendet haben oder ob Sie externe .h-Dateien haben. Im Allgemeinen sieht eine C-Datei in etwa so aus:

#include <stdio.h>
    /* any other includes, prototypes, struct delcarations... */
    int main(){
    */ code */
}

Wenn ich eine „undefinierte Referenz auf main“ erhalte, bedeutet dies normalerweise, dass ich eine .c-Datei habe, die keine hat int main() in der Datei. Wenn Sie Java zum ersten Mal gelernt haben, ist dies eine verständliche Art der Verwirrung, da Ihr Code in Java normalerweise wie folgt aussieht:

//any import statements you have
public class Foo{
    int main(){}
 }

Ich würde raten, nachzusehen, ob Sie es haben int main() oben.

1407780cookie-checkC Linking Error: undefinierter Verweis auf ‘main’

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy