0

我只需要为makefile 运行make 命令。但是当我运行这个 make 命令时,我得到了“未定义对‘log’的引用”的错误,因为我知道它不包括数学库,我们必须在运行时包括在内。我知道如果我使用 gcc 编译器运行它,那么我可以在最后编写 -lm,它将包含数学库。我的问题是我需要使用 make 命令运行它,即 make lu。

在此,如果我写 make lu -lm 它不是链接数学库。请帮忙

使用此链接How to use LDFLAGS in makefile 我更新了我的 make 文件,但同样的问题仍然存在。请帮忙。

SHELL=/bin/sh
BENCHMARK=ep
BENCHMARKU=EP

include ../config/make.def

OBJS = ep.o ${COMMON}/c_print_results.o ${COMMON}/c_${RAND}.o \
       ${COMMON}/c_timers.o ${COMMON}/c_wtime.o

include ../sys/make.common
LDLIBS=-lm
LDFLAGS=-lm


${PROGRAM}: config ${OBJS}
    ${CLINK} ${CLINKFLAGS} -o ${PROGRAM} $(LDFLAGS) $(LOADLIBES) ${OBJS} ${C_LIB}


ep.o:       ep.c npbparams.h
    ${CCOMPILE} ep.c

clean:
    - rm -f *.o *~ 
    - rm -f npbparams.h core
4

1 回答 1

0

为什么你的 makefile 会引用各种不存在的变量,比如LOADLIBES, C_LIB?你为什么要设置你从不使用的变量,比如LDLIBS

它不起作用的原因是您将库引用放在LDFLAGS变量中,该变量在您的链接命令的早期出现在您的任何目标文件之前。因此,当链接器转到数学库中的链接时,它认为不需要它,因为还没有任何东西在使用它。

您必须将库放在链接行的末尾

由于您最后已经有了C_LIB未使用的变量,因此如果添加:

C_LIB = -lm

那么它应该可以工作。

于 2013-12-06T18:00:19.947 回答