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。是的,我也会研究它们。谢谢能得到像你这样有经验、合作的人的帮助感觉真好。我喜欢的是,这里的人们不只是为了满足饥饿而赠送一条鱼,而是帮助我们学会如何自己捕鱼。添加到MakefileTARGET\u LIBFILES+=-lm
是一个更好的解决方案。