C 对sqrt的未定义引用

C 对sqrt的未定义引用,c,makefile,sqrt,C,Makefile,Sqrt,我在1.c中包含了math.h,在makefile中包含了LDLIBS=-lm 1.c和2.c是当前目录中的一些文件 制作文件如下: 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 -DWI

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

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

制作文件如下:

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

我已经阅读了相关的stackoverflow问题和答案,但无法理解为什么
未定义对sqrt的引用

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

然后,运行
make-p
一次以了解内置规则(假设您正在使用)。一定要阅读。同时运行
make--trace
和/或使用(例如作为
remake-x
)调试
Makefile

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

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


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

请尝试干运行
make-n
。如果执行的命令不是您所期望的,那么它应该立即告诉您当发生类似的事情时,即使您已经包括math.h,您可能没有将浮点库链接到项目。嵌入式系统的常见问题。通常在创建项目时会有一些选项,或者有一些编译器/链接器选项。你是对的。我在Makefile.include中添加了
-lm
。我还有其他一些错误,但我排除了这个错误。谢谢我认为你不应该弄乱你的
$(CONTIKI)/Makefile。包括
你需要更多地了解你的特定程序、GNU make和CONTIKI。是的,我也会研究它们。谢谢能得到像你这样有经验、合作的人的帮助感觉真好。我喜欢的是,这里的人们不只是为了满足饥饿而赠送一条鱼,而是帮助我们学会如何自己捕鱼。添加到Makefile
TARGET\u LIBFILES+=-lm
是一个更好的解决方案。