无法使用gcc

时间:2018-09-10 13:20:50

标签: c gcc compilation ubuntu-16.04

我正在尝试使用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 :(得分:4)

编译为

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

(实际上,不需要-lm,您不需要使用<math.h>函数;但是保留-lm不会造成损害)

稍后,learn编写您的Makefile,可以分几步来完成这些操作:

首先,使用{p>获取source.o对象文件

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

然后使用{p>获取main.o对象文件

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

最后,将两者链接

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

答案 1 :(得分:3)

这里

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

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

的错误
  

对“ main”的未定义引用

编译时提供源文件main.csource.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 ;*/

还按照@Basile的指示学习如何使用https://github.com/ohabash/fornida-ng6/进行编译,您无需手动创建.o文件,您的Makefile将创建.o文件&如果正确编写则进行编译。