Sono nuovo al SO Linux. Sto cercando di compilare un file .c
utilizzando un makefile. La biblioteca matematica deve essere collegata. Il mio makefile si presenta così:Come utilizzare LDFLAG nel makefile
CC=gcc
CFLAGS=-Wall -lm
all:client
.PHONY: clean
clean:
rm *~ *.o client
Quando eseguo make
, ottengo il seguente errore:
"undefined reference to rint"
quindi non è in grado di collegare la libreria matematica.
Ma quando compilo in modo esplicito utilizzando
gcc client.c -lm -o client
si compila con successo.
Quindi, come devo cambiare il mio makefile in modo che funzioni. Ho già provato ad aggiungere LDFLAGS=-lm
. Ma ottengo lo stesso errore.
Dovrei anche aggiungere che quando ho eseguito make
, si espande per
gcc -Wall -lm client.c -o client
(si noti che quando ho eseguito gcc
esplicitamente con -lm
alla fine, funziona).
LDLIBS è per le biblioteche, LDFLAGS deve essere utilizzato per i percorsi bandiere/ricerca (-L) – falstaff
[non c'è bisogno di definire in modo esplicito 'CC'.] (Http://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html) – 0xcaff
Ho anche pensato che -lm dovrebbe essere in LDFLAGS ma come risulta (vedi la risposta di laindir e https://www.gnu.org/software/make/manual/html_node/Catalogue-of-Rules.html), dovrebbe invece essere in LOADLIBES e quindi tutto funziona fuori dalla scatola (cioè senza definire regole esplicite) ! –