未定义的 sqrt 引用

Undefined reference to sqrt

我在 1.c 中包含了 math.h,在 makefile 中包含了 LDLIBS=-lm

1.c 和 2.c 是当前目录中的一些文件。

Make文件如下:

dINES+=PROJECT_CONF_H=\"project-conf.h\"
CONTIKI_PROJECT = 1 2
all: $(CONTIKI_PROJECT)

CONTIKI = ../..

WITH_UIP6=1
UIP_CONF_IPV6=1

CFLAGS+= -DUIP_CONF_IPV6_RPL -DUIP_CONF_IPV6 -DWITH_UIP6
LDLIBS=-lm
ifdef PERIOD
CFLAGS=-DPERIOD=$(PERIOD)
endif    

include $(CONTIKI)/Makefile.include

我已经阅读了相关的 Whosebug 问题和答案,但无法理解为什么 Undefined reference to sqrt

首先,请注意 include $(CONTIKI)/Makefile.include 可以取消您在上面所做的任何设置。所以我们无法调试您的问题。

然后,运行 make -p 一次了解内置规则(假设您正在使用 GNU make). Be sure to read documentation of make. Run also make --trace and/or use remake(例如 remake -x)调试您的 Makefile .

请注意 gcc 的程序参数顺序非常重要。首先阅读 gcc 文档的 Invoking GCC 章节。您想要使用 -Wall -g 进行编译(以获取所有警告和调试信息),这可能会添加到您的 CFLAGS+= 行中。也许你的
CFLAGS=-DPERIOD=$(PERIOD) 行应该是 CFLAGS+= -DPERIOD=$(PERIOD)

也许你的 LDLIBS=-lm 行应该是 LIBES= -lm.

Undefined reference: sqrt 消息可能是因为您的编译命令(运行 by make)缺少 -lm 或顺序错误。