【问题标题】:Why am I getting an "undefined reference to" error. (linker issue using make)为什么我收到“未定义的引用”错误。 (使用make的链接器问题)
【发布时间】: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 实现,但我不知道为什么。 如果有人有任何建议,他们将不胜感激。

【问题讨论】:

  • 你的链接命令是什么样的?它是否指定了所有需要的目标文件?如果没有,那就修复它。

标签: c makefile linker ld


【解决方案1】:

回答:我在错误的平台上构建,所以链接器在错误的目录中查找

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2020-11-22
    相关资源
    最近更新 更多