C Ошибка связи: undefined ссылка на 'main'

Я прочитал другие ответы на эту тему, и, к сожалению, они мне не помогли. Я пытаюсь связать несколько c-программ вместе, и я получаю сообщение об ошибке:

$ 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

У меня есть только одна основная функция, и она находится в runexp. Форма

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

Любые мысли о том, почему я могу получить эту ошибку? Спасибо!

Ответ 1

Вы должны указать имя выходного файла после -o. В вашем случае runexp.o рассматривается как имя выходного файла, а не входной файл объекта, и поэтому ваша функция main undefined.

Ответ 2

Вы не включаете файл C, содержащий main() при компиляции, поэтому компоновщик не видит его.

Вам нужно добавить его:

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

Ответ 3

Вы переписываете свой объектный файл runexp.o, выполнив следующую команду:

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

Фактически, -o предназначен для файла output. Вам нужно запустить:

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

runexp.out будет бинарным файлом.

Ответ 4

Как правило, вы компилируете большинство файлов .c следующим образом:

gcc foo.c -o foo. Это может варьироваться в зависимости от того, что #includes вы использовали или у вас есть внешние файлы .h. Как правило, когда у вас есть файл C, он выглядит примерно так:

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

Когда я получаю ссылку "undefined на главную", обычно это означает, что у меня есть .c файл, который не имеет int main() в файле. Если вы впервые узнали Java, это понятная путаница, поскольку в Java ваш код обычно выглядит следующим образом:

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

Я бы посоветовал посмотреть, есть ли у вас int main() вверху.