Невозможно скомпилировать и связать main.c с другим исходным файлом, используя gcc - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь скомпилировать следующий исходный файл, используя gcc -g -Wall -Wextra -pedantic -std=c99 -o main -lm.

source.h

void simple_sum(void)

source.c

    #include "source.h"
    #include <stdio.h>

    void simple_sum(void)
    {
        int a, b;
        scanf("%d %d", &a, &b);
        printf("%d + %d = %d\n",a, b, a + b);
    }

main.c

#include "source.h"                                                                                                     
#include <stdio.h>  

int main(void)                                                                                                          
{                                                                                                                           
    printf("\n");                                                                                                           
    simple_sum();     

    return 0;                                                                                                           
}

Я получаю следующую ошибку:

gcc -g -Wall -Wextra -pedantic -std=c99 -o main  -lm
/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/crt1.o: In function _start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target 'main' failed
make: *** [main] Error 1

Может кто-нибудь подсказать, пожалуйста, как это исправить?

Редактировать

Я получаю следующую ошибку при запуске с использованием gcc -g -Wall main.c -o main

/tmp/ccEAL4iG.o: In function Основной: /home/a/aalto_university/functions/calculation/main.c:7: неопределенная ссылка на simple_sum' collect2: error: ld returned 1 exit status

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Компилировать с

 gcc -g -Wall -Wextra -pedantic -std=c99 source.c main.c -o myprog -lm

(на самом деле, -lm не требуется, вы не используете функции <math.h>; но сохранение -lm не должно вредить)

Позже, научитесь написать свой Makefile для выполнения этих действий в несколько шагов:

Сначала получите source.o объектный файл с

gcc -g -Wall -Wextra -pedantic -std=c99 -c source.c

затем получите main.o объектный файл с

gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c

Наконец, свяжите их обоих

gcc -g source.o main.o -lm -o myprog
0 голосов
/ 10 сентября 2018

Здесь

gcc -g -Wall -Wextra -pedantic -std=c99 -o main  -lm

вы не предоставляете компоновщику имя исходного файла , следовательно, он выдает ошибку типа

неопределенная ссылка на `main '

При компиляции укажите исходный файл main.c и source.c. Например, сначала запустите этот

gcc -g -Wall -Wextra -pedantic -std=c99 -c main.c source.c -lm

для создания .o файлов объектов, а затем для создания исполняемого файла, запустив

gcc source.o main.o -o my_exe

И, наконец, запустите исполняемый файл. Также объявление simple_sum() отсутствует ; должно быть

void simple_sum(void); /* you miss ;*/

Также узнайте, как использовать Makefile для компиляции, как указано @Basile, там вам не нужно создавать файл .o вручную, ваш Makefile создаст файл .o и скомпилирует, если он написано правильно.

...