【发布时间】:2020-06-18 04:41:45
【问题描述】:
我知道有很多类似的问题,但似乎没有一个能回答我的问题。我正在编写单元测试代码,我正在调用以下函数,
ads1259_init(&settings, &storage);
它应该在 x86 上启动一个虚假的 spi 通信。但是,我收到链接器错误未定义对“ads1259_init”的引用。
我已经将头文件中的函数定义为
StatusCode ads1259_init(Ads1259Settings* settings, Ads1259Storage* storage);
在.c文件中作为
StatusCode ads1259_init(Ads1259Settings* settings, Ads1259Storage* storage) {...}
我们正在为我们的构建系统使用 make(我对此知之甚少),并且当我运行命令 make test LIBRARY=ms-drivers PLATFORM=x86 时应该调用的驱动程序库的 make 文件测试该目录中的所有驱动程序是:
# Defines $(T)_SRC, $(T)_INC, $(T)_DEPS, and $(T)_CFLAGS for the build makefile.
# Tests can be excluded by defining $(T)_EXCLUDE_TESTS.
# Pre-defined:
# $(T)_SRC_ROOT: $(T)_DIR/src
# $(T)_INC_DIRS: $(T)_DIR/inc{/$(PLATFORM)}
# $(T)_SRC: $(T)_DIR/src{/$(PLATFORM)}/*.{c,s}
$(T)_DEPS := $(PLATFORM_LIB) libcore
ifeq (x86,$(PLATFORM))
$(T)_test_ltc_afe_MOCKS := spi_exchange
endif
我很困惑,因为大约有 8 个其他驱动程序使用相同的 make 文件,并且设置的文件结构与我的完全相同。当我注释掉这一行并运行命令时,它们都测试得很好。我正在使用 VS 代码,我们所有的构建都发生在 vagrant 中,这是一个 linux 虚拟机。我认为问题在于链接器没有找到 .c 实现,但我不知道为什么。 如果有人有任何建议,他们将不胜感激。
【问题讨论】:
-
你的链接命令是什么样的?它是否指定了所有需要的目标文件?如果没有,那就修复它。