我目前正在尝试设置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层提供的某些功能,所以我需要使模拟库变弱,否则它将给我带来多个定义错误。
所以我的问题是为什么弱属性会导致未定义的引用错误,我该如何解决?
答案 0 :(得分:0)
因此,显然,MinGW不支持弱属性。当我移至ubuntu时就可以了。
不确定我是否正确,但是对于MinGW来说,仍然可能有弱属性的替代方法,即使用__declspec(selectany),但它似乎仅适用于变量,因为当我将其应用于函数时,它将给我这个错误的'selectany'属性仅适用于具有外部链接的初始化变量