C Koppelingsfout: ongedefinieerde verwijzing naar ‘hoofd’

Ik heb de andere antwoorden over dit onderwerp gelezen en helaas hebben ze me niet geholpen. Ik probeer verschillende c-programma’s aan elkaar te koppelen, en ik krijg een foutmelding als antwoord:

$ 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

Ik heb precies één hoofdfunctie en die is in runexp. Het formulier is

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

Heeft u een idee waarom ik deze foutmelding krijg? Bedankt!


Antwoord 1, autoriteit 100%

U moet de naam van het uitvoerbestand opgeven na de optie -o. In uw geval wordt runexp.obehandeld als uitvoerbestandsnaam, niet als invoerobjectbestand en dus is uw main-functie niet gedefinieerd.


Antwoord 2, autoriteit 28%

Je neemt het C-bestand dat main()bevat niet op tijdens het compileren, dus de linker ziet het niet.

Je moet het toevoegen:

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

Antwoord 3, autoriteit 9%

U overschrijft uw objectbestand runexp.odoor deze opdracht uit te voeren:

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

In feite is de -ovoor het output-bestand.
Je moet rennen:

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

runexp.out is een binair bestand.


Antwoord 4

Over het algemeen compileer je de meeste .c-bestanden op de volgende manier:

gcc foo.c -o foo. Het kan variëren, afhankelijk van wat u hebt gebruikt of als u externe bestanden hebt. Over het algemeen ziet het als u een C-bestand enigszins als het volgende uitziet:

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

Wanneer ik een ‘undefined reference to main’ krijg, betekent dit meestal dat ik een .c-bestand heb dat niet int main()in het bestand heeft. Als je voor het eerst Java hebt geleerd, is dit een begrijpelijke manier van verwarring sinds in Java, je code lijkt meestal op het volgende:

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

Ik zou willen adviseren om te kijken of u int main()bovenaan hebt.

Other episodes