无法使用 gcc 编译 link main.c 到另一个源文件

Unable to compile and link main.c to another source file using gcc

我正在尝试使用 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

的未定义引用

这里

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

你没有向链接器提供源文件名,因此它会抛出类似

的错误

undefined reference to `main'

编译时提供源文件main.csource.c。例如第一个运行这个

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

创建对象.o 文件,然后通过 运行ning

创建可执行文件
gcc source.o main.o -o my_exe

最后是 运行 可执行文件。另外 simple_sum() 的声明缺少 ; 它应该是

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

还学习如何使用 Makefile 进行编译,正如@Basile 指出的那样,您不必手动创建 .o 文件,您的 Makefile 将创建 .o 文件并编译,如果它写得正确。

编译

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

(实际上,不需要-lm,您不使用<math.h>函数;但保留-lm应该没有坏处)

稍后,learn 编写您的 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

最后,link他们两个

gcc -g source.o main.o -lm -o myprog