Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Undefined reference to exp on Ubuntu (including math.h and linking with -lm)

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 $@ [email protected] $(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?

like image 971
Selied Avatar asked Dec 16 '22 06:12

Selied


2 Answers

$(CC) $(LDLAGS) -o $@ [email protected] $(OBJ)

should be

$(CC) -o $@ [email protected] $(OBJ) $(LDLAGS)

Whether -l flags can be given before object files depends on the GCC version.

like image 108
Fred Foo Avatar answered Dec 18 '22 20:12

Fred Foo


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.

like image 37
Jakuje Avatar answered Dec 18 '22 20:12

Jakuje