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

#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 error引用。
如果我删除weak属性,那么它不会给我未定义的引用错误。但是因为我需要重写HAL层提供的一些函数,所以我需要将模拟库设为弱库,否则它将给我多个定义错误。
所以我的问题是,为什么弱属性会导致未定义的引用错误,我该如何处理它?

最佳答案

很明显,明不支持弱属性。当我搬到ubuntu的时候就没事了。
不确定我是否正确,但对于MinGW,可能还有一个弱属性的替代方法,即使用declspec(selectany),但它似乎只适用于变量,因为当我应用于函数时,它会给我这个错误'selectany'属性只适用于具有外部链接的初始化变量

关于c - __attribute __((weak))函数导致 undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55240919/

10-11 21:00