【问题标题】:Contiki: undefined reference to a function defined in a separate source fileContiki:对单独源文件中定义的函数的未定义引用
【发布时间】:2018-01-23 22:43:33
【问题描述】:

我正在使用 Contiki 操作系统编写程序。

我有 remote_firmware.c 文件和一个名为 parser 的文件夹,其中包含 parser.hparser.c 文件,我在其中编写了方法 void test()。我将parser.h 包含在remote_firmware.c 中:

#include "parser/parser.h"

Makefile 看起来像这样:

CONTIKI_PROJECT = remote_firmware
all: $(CONTIKI_PROJECT)

#UIP_CONF_IPV6=1

CONTIKI_WITH_RIME = 1
CONTIKI = $(HOME)/contiki

include $(CONTIKI)/Makefile.include

当我尝试构建此错误时:

对“测试”的未定义引用

我知道 Makefile 需要知道 parser.h,但我不知道如何。我尝试了这里提出的几种解决方案,但我想我做错了。也许你们当中有人知道该怎么做?

非常感谢。

【问题讨论】:

标签: c makefile contiki


【解决方案1】:

您的源文件位于何处?尝试将源文件名添加到PROJECT_SOURCEFILES 预处理器变量(即PROJECT_SOURCEFILES+=parser.c)并将源文件的位置添加到CONTIKIDIRS 预处理器变量(即CONTIKIDIRS+={Directory})。

如果 parser.c 依赖于许多其他 C 文件,您可能需要先创建一个 C 库存档,然后通过将库名称添加到 TARGET_LIBFILES 变量来将该库添加到您的项目中。

【讨论】:

    【解决方案2】:

    错误undefined reference to test 是来自链接器而非编译器的错误。它与包含头文件无关。这意味着当您链接可执行文件时,您没有包含 parser.o

    【讨论】:

    • 是的。它是 Makefile 的问题:CONTIKI_PROJECT = remote_firmware all: $(CONTIKI_PROJECT) #UIP_CONF_IPV6=1 PROJECT_SOURCEFILES += parser/parser.c CONTIKI_WITH_RIME = 1 CONTIKI = $(HOME)/contiki include $(CONTIKI)/Makefile.include 我添加了行PROJECT_SOURCEFILES += parser/parser.c 但仍然:> 打开依赖文件 obj_zoul/parser/parser.d:没有这样的文件或目录
    最近更新 更多