未定义的对main,makefile的引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未定义的对main,makefile的引用相关的知识,希望对你有一定的参考价值。

我有一个简单的结构:

sample2Make$ ls

ADD DIV inc_print.h main.c makefile multiplication.o printer.o response.o subtraction.o addition.o division.o inc_resp.h main.o MUL printer.c response.c SUB

其中ADD,DIV,SUB,MUL是包含操作源文件和头文件的子目录。 makefile是:

app: addition.o subtraction.o multiplication.o division.o response.o
        gcc -o app response.o addition.o subtraction.o multiplication.o division.o

response.o: inc_resp.h inc_print.h response.c printer.c main.c
    gcc -c response.c printer.c main.c

addition.o: ADD/inc_add.h ADD/addition.c
    gcc -c ADD/addition.c

subtraction.o: SUB/inc_sub.h SUB/subtraction.c
    gcc -c SUB/subtraction.c

multiplication.o: MUL/inc_mul.h MUL/multiplication.c
    gcc -c MUL/multiplication.c

division.o: DIV/inc_div.h DIV/division.c
    gcc -c DIV/division.c

头文件只是声明了它们各自的功能。现在写完一个命令后:

sample2Make$ make -f makefile

我得到的输出是:

gcc -c ADD/addition.c
gcc -c SUB/subtraction.c
gcc -c MUL/multiplication.c
gcc -c DIV/division.c
gcc -c response.c printer.c main.c
gcc -o app addition.o subtraction.o multiplication.o division.o response.o
/usr/lib/gcc/i686-linux-gnu/4.9/../../../i386-linux-gnu/crt1.o: In function `_start':
/build/buildd/glibc-2.21/csu/../sysdeps/i386/start.S:111: undefined reference to `main'
collect2: error: ld returned 1 exit status
makefile:3: recipe for target 'app' failed
make: *** [app] Error 1
答案

您错过了在最终编译语句中包含printer.omain.o,并且由于缺少对main()的引用,您的编译器会尖叫。

你的最终陈述应该是这样的

gcc -o app addition.o subtraction.o multiplication.o division.o response.o printer.o main.o

以上是关于未定义的对main,makefile的引用的主要内容,如果未能解决你的问题,请参考以下文章

makefile 中未定义的引用

看到未定义的对“CollidingMice 的 vtable”的引用

使用 ICC 在 Linux 中未定义的对 clock_gettime() 的引用

linux makefile中对函数的未定义引用

为啥我得到:“未定义的对 `glfwInit' 的引用”?

Opencv '未定义的对 `cv::namedWindow....' 的引用(链接错误)