I am new to Linux OS. I am trying to compile a .c
file using a makefile. The math library has to be linked. My makefile looks like this:
CC=gcc
CFLAGS=-Wall -lm
all:client
.PHONY: clean
clean:
rm *~ *.o client
When I run make
, I get the following error:
"undefined reference to rint"
So it is not able to link the math library.
But when I compile explicitly using
gcc client.c -lm -o client
it successfully compiles.
So how should I change my makefile such that it works. I have already tried adding LDFLAGS=-lm
. But I get the same error.
I should also add that when I run make
, it expands to
gcc -Wall -lm client.c -o client
(notice that when I run gcc
explicitly with -lm
at the end, it works).
Your linker (ld) obviously doesn't like the order in which make arranges the GCC arguments so you'll have to change your Makefile a bit:
CC=gcc
CFLAGS=-Wall
LDFLAGS=-lm
.PHONY: all
all: client
.PHONY: clean
clean:
$(RM) *~ *.o client
OBJECTS=client.o
client: $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o client $(LDFLAGS)
In the line defining the client target change the order of $(LDFLAGS)
as needed.