Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C __属性_u((弱))函数导致引用未定义_C_Stm32_Weak Linking_Cmock - Fatal编程技术网

C __属性_u((弱))函数导致引用未定义

C __属性_u((弱))函数导致引用未定义,c,stm32,weak-linking,cmock,C,Stm32,Weak Linking,Cmock,我目前正在尝试使用MinGW和CMake为STM32单元测试设置CMock。在我的配置文件中,我设置了:弱:选项,以便生成的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_Stat

我目前正在尝试使用MinGW和CMake为STM32单元测试设置CMock。在我的配置文件中,我设置了:弱:选项,以便生成的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的未定义引用

如果我删除
属性,那么它不会给我未定义的引用错误。但是因为我需要重写HAL层提供的一些函数,所以我需要将模拟库设置为弱库,否则它会给我多个定义错误


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

显然,MinGW不支持弱属性。当我转到ubuntu时,一切都很好


不确定我是否正确,但对于MinGW,可能还有一个弱属性的替代方法,那就是使用u declspec(selectany),但它似乎只适用于变量,因为当我应用于函数时,它会给我这个错误“selectany”属性只适用于具有外部链接的初始化变量,MinGW不支持弱属性。当我转到ubuntu时,一切都很好


不确定我是否正确,但对于MinGW,可能还有一个替代弱属性的方法,即使用uu declspec(selectany),但它似乎只适用于变量,因为当我应用于函数时,它会给我这个错误“selectany”属性只适用于带有外部链接的初始化变量

Post-linking命令。检查库的顺序。提示:
target\u link\u库(target-Wl,-这里是整个存档库-Wl,-没有整个存档)
target\u link\u库(这里是目标库,再次重复所有库)
我已经试过你说的,但没有用
add_library(mockLibrary STATIC${LIB_SOURCES})
然后
TARGET_LINK_library(TestPortTimer mockLibrary mockLibrary)
链接库源通过
file(GLOB LIB_SOURCES LIST_DIRECTORIES true…)找到
FYI,如果我删除
HAL StatusTypeDef属性((弱))HAL TIM_IC_Init(TIM_HandleTypeDef*htim)
声明行或简单的
\uuu属性(弱))
,然后问题就消失了。但是我不想手动操作,因为文件是自动生成的。那么这里有什么问题呢?发布链接命令。检查库的顺序。提示:
目标链接库(target-Wl,-整个存档库在此-Wl,-没有整个存档)
目标链接库(目标库在此重复所有库)
我尝试了你所说的,但它不起作用。
添加库(mockLibrary STATIC${LIB\u SOURCES}
然后
目标链接库(TestPortTimer mockLibrary mockLibrary)
链接库源可通过
文件(GLOB LIB_sources LIST_DIRECTORIES true…)找到
供参考,如果我删除
HAL_StatusTypeDef_属性uu((弱))HAL_TIM_IC_Init(TIM_HandleTypeDef*htim);
声明行或仅删除
u属性u((弱))
,然后问题消失。但我不想手动执行,因为文件是自动生成的。那么这里的问题是什么?
\uuuu declspec(selectany)
仅适用于初始化变量。
\uu declspec(selectany)
仅适用于初始化变量。