__attribute __((weak))函数导致未定义引用

时间:2019-03-19 12:18:08

标签: c stm32 weak-linking cmock

我目前正在尝试设置CMock,以使用MinGW和CMake对STM32进行单元测试。在我的配置文件中,设置:weak:选项,以便生成的模拟将给我弱函数。一个例子是:

#if defined (__IAR_SYSTEMS_ICC__)
#pragma weak HAL_TIM_IC_Init
#else
HAL_StatusTypeDef  __attribute__((weak)) HAL_TIM_IC_Init(TIM_HandleTypeDef* htim);
#endif

HAL_StatusTypeDef HAL_TIM_IC_Init(TIM_HandleTypeDef* htim)
{
  ...
}

但是,当我编译时,它为我提供了对HAL_TIM_IC_Init错误的未定义引用。

如果我删除了weak属性,那么它不会给我未定义的引用错误。但是因为我需要重写HAL层提供的某些功能,所以我需要使模拟库变弱,否则它将给我带来多个定义错误。

所以我的问题是为什么弱属性会导致未定义的引用错误,我该如何解决?

1 个答案:

答案 0 :(得分:0)

因此,显然,MinGW不支持弱属性。当我移至ubuntu时就可以了。

不确定我是否正确,但是对于MinGW来说,仍然可能有弱属性的替代方法,即使用__declspec(selectany),但它似乎仅适用于变量,因为当我将其应用于函数时,它将给我这个错误的'selectany'属性仅适用于具有外部链接的初始化变量