简单Makefile的问题:对’cos @@ GLIBC_2.2.5’符号的未定义引用

我正在尝试使用Makefile来编译一些测试C代码。 main.c文件包含两个标头:

 #include "circle_buffer.h" #include "window.h" 

当我执行以下Makefile时

 # compiler CC=gcc # compiler flags: # -g adds debugging information to the executable file # -Wall turns on most, but not all, compiler warnings CFLAGS= # include path INCLUDES = # library path and names LIBS=-L/usr/lib/x86_64-linux-gnu -lsndfile MAIN = test $(MAIN): main.o circle_buffer.o window.o $(CC) main.o circle_buffer.o window.o -o $(MAIN) $(LIBS) main.o: main.c circle_buffer.h window.h $(CC) -c main.c $(INCLUDES) circle_buffer.o: circle_buffer.c circle_buffer.h $(CC) -c circle_buffer.c $(INCLUDES) window.o: window.h $(CC) -c window.c $(INCLUDES) .PHONY: clean clean: rm -rf *o $(MAIN) 

我明白了

 xxx@xxx:~/source$ make gcc -c main.c gcc -c circle_buffer.c gcc -c window.c gcc main.o circle_buffer.o window.o -o test -L/usr/lib/x86_64-linux-gnu -lsndfile /usr/bin/ld: window.o: undefined reference to symbol 'cos@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make: *** [test] Error 1 

如果我从main.c删除#include "window.h" ,并在Makefile中删除window.o / h / c的所有引用,它就可以了。

我错过了什么? 我在哪里违反规则

 target: dependencies [tab] system command 

听起来像数学库,需要链接libm 。将-lm添加到链接阶段。

  LIBS=-L/usr/lib/x86_64-linux-gnu -lsndfile -lm 

也尝试使用c ++而不是gcc编译器。 它默认包含此库。