4

我在尝试编译在 Ubuntu 上使用 exp 函数的程序时遇到了一些麻烦。我从 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

在这里,我向您展示我的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 $<

此外,我在头文件的顶部包含了它,它可以在另一台计算机上运行。

你知道发生了什么吗?

4

2 回答 2

10
$(CC) $(LDLAGS) -o $@ $@.o $(OBJ)

应该

$(CC) -o $@ $@.o $(OBJ) $(LDLAGS)

是否-l可以在目标文件之前给出标志取决于 GCC 版本。

于 2011-12-13T15:53:03.703 回答
2

没关系。对这个问题进一步感兴趣或者纠结也太久,还行

LDLAGS  = -lm

应该写成

LDLIBS = -lm

因为LDLIBS被放在目标文件之后,不像LDFLAGS,它在默认的 make 模板中在它们前面结束,作为文档提示。

于 2015-11-30T19:51:47.297 回答