Проблема с простым Makefile: undefined ссылка на символ "cos @@GLIBC_2.2.5"

Я пытаюсь вычислить некоторый тестовый код C с помощью Makefile. Файл 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)

Я получаю

[email protected]:~/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 '[email protected]@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

Если я удаляю #include "window.h" из main.c и все ссылки на window.o/h/c в Makefile, он работает.

Что мне не хватает? Где я нарушаю правило

target: dependencies
[tab] system command

?

Ответы

Ответ 1

Звучит как математическая библиотека, libm необходимо связать. Добавьте -lm на этап компоновки.

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

Ответ 2

Также попробуйте использовать С++ вместо gcc-компилятора. Он включает эту библиотеку по умолчанию.