IAR 错误 [Li005]:没有函数定义,即使文件已添加到项目中并且文件路径位于预处理器路径中

IAR Error[Li005] : no definition for function even though the file is added in the project and the path to the file is in the pre-processor paths

我有一个奇怪的问题。我正在尝试将来自 Nordic Semiconductors 外围设备示例的 spi 模块与 Central BLE Uart 项目集成。

所有示例都有一个通用的组件库。所以我所做的是将 spi_slave 文件 nrf_drv_spis.c 添加到我的项目中,并将该组件的路径添加到项目的预处理器路径。

$PROJ_DIR$\..\..\..\..\..\..\..\components\drivers\nrf_spi_slave 在我的预处理器路径中,这是 nrf_drv_spis.c 的位置nrf_drv_spis.h是。

但是,当我编译代码时,出现了这个错误

Error[Li005]: no definition for "nrf_drv_spis_init" [referenced from D:\Repo\ble_projects\nRF5_SDK_12.3.0\examples\ble_central\ble_app_uart_c\pca10028\s130\iar\_build\main.o] 

nrf_drv_spis_init是在nrf_drv_spis.c中找到的函数,原型在 nrf_drv_spis.h。同样奇怪的是,当我右键单击 nrf_drv_spis_init 和 "go to the definition" 时,它总是将我带到头文件中的原型。通常,IAR 会向我显示函数的原型或定义,我需要单击声明或原型。

所以它确实告诉我,无论出于何种原因,文件 nrf_drv_spis.c 似乎不在项目,但我不知道该怎么做才能解决这个问题。

如有任何帮助,我们将不胜感激。 谢谢

所以这里的问题是我在另一个重要的头文件中错过了,一些定义在#ifdef 后面,因此在编译代码时,没有包含正确的文件。

设置正确的参数使代码能够正确编译。

我有同样的问题,问题是我在 .h 文件中定义的全局参数(使用 extern)。 当我将它们移动到 .c 文件时,它解决了问题。 我不明白为什么,但它奏效了。