问题
I'm having some trouble trying to compile a program that uses exp function on Ubuntu. I get this error from gcc:
selied@Apolo:~/Dropbox/practicas UAM/Neuro/practica3$ make
gcc -lm -o retropropagacion retropropagacion.o
retropropagacion.o: In function `main':
/home/selied/Dropbox/practicas UAM/Neuro/practica3/retropropagacion.c:177: undefined reference to `exp'
/home/selied/Dropbox/practicas UAM/Neuro/practica3/retropropagacion.c:186: undefined reference to `exp'
/home/selied/Dropbox/practicas UAM/Neuro/practica3/retropropagacion.c:297: undefined reference to `exp'
/home/selied/Dropbox/practicas UAM/Neuro/practica3/retropropagacion.c:306: undefined reference to `exp'
collect2: ld devolvió el estado de salida 1
make: *** [retropropagacion] Error 1
Here I show you my makefile.
CC = gcc
LDLAGS = -lm
CFLAGS = -Wall -g
EXE = retropropagacion normalizar
OBJ =
INC =
compile : $(EXE)
clean :
@echo Borrando archivos temporales...
rm -f *~ *.o core $(EXE)
help :
@echo
backpropagation :
./retropropagacion entrada.txt 0 0 salida.txt
and :
./retropropagacion and.dat 0 0 salida_and.txt
$(EXE) : % : %.o $(OBJ)
$(CC) $(LDLAGS) -o $@ $@.o $(OBJ)
%.o : %.c $(INC)
$(CC) $(CFLAGS) -c $<
Also I have include at the top of my header file and it works on another computer.
Do you know what's happening?
回答1:
$(CC) $(LDLAGS) -o $@ $@.o $(OBJ)
should be
$(CC) -o $@ $@.o $(OBJ) $(LDLAGS)
Whether -l
flags can be given before object files depends on the GCC version.
回答2:
Never mind. For further interested about this issue or struggling also too long, also line
LDLAGS = -lm
should be written as
LDLIBS = -lm
because LDLIBS
are put after the object files, unlike the LDFLAGS
, which ends in front of them in default make template, as documentation hints.
来源:https://stackoverflow.com/questions/8492064/undefined-reference-to-exp-on-ubuntu-including-math-h-and-linking-with-lm