c - 为什么我收到“未定义的引用”错误。(使用make的链接器问题)
问题描述
我知道有很多类似的问题,但似乎没有一个能回答我的问题。我正在编写单元测试代码,我正在调用以下函数,
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 实现,但我不知道为什么。如果有人有任何建议,他们将不胜感激。
解决方案
回答:我在错误的平台上构建,所以链接器在错误的目录中查找
推荐阅读
- javascript - 实现设备指纹的网络源
- django - Django REST框架中的文件上传处理
- java - 如何在java中使用用户输入添加2个可变长度数组
- swiftui - space around top of the background image
- sql-server - 如何编写查询以将 SQL Server 数据库模式从 Recovery 更改为 NoRecovery
- reactjs - 将道具传递给顶级组件中的状态
- json - 解组到 map[string]interface{} 后对 ma[string][]string 的类型断言失败
- deployment - 使用自动化脚本将多个 SSIS 包部署到 MSDB
- spring-boot - Mustache 不适用于 @RestController 但适用于 @Controller
- java - Java Swing 在线程“AWT-EventQueue-0”中读取 PDF 返回异常 java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString