【发布时间】:2019-08-09 23:24:55
【问题描述】:
我目前正在尝试设置 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层提供的一些函数,所以需要将mocked库设为weak,否则会出现多个定义错误。
所以我的问题是为什么弱属性会导致未定义的引用错误,我该如何解决?
【问题讨论】:
-
发布链接命令。检查库的顺序。提示:
target_link_libraries(target -Wl,-whole-archive LIBS_HERE -Wl,-no-whole-archive)或target_link_libraries(target LIBS_HERE REPEAT_ALL_THE_LIBS_AGAIN) -
你说的我试过了,但是没用。
add_library(mockLibrary STATIC ${LIB_SOURCES})然后TARGET_LINK_LIBRARIES(TestPortTimer mockLibrary mockLibrary)链接库来源由file(GLOB LIB_SOURCES LIST_DIRECTORIES true ...)找到 -
仅供参考,如果我删除
HAL_StatusTypeDef __attribute__((weak)) HAL_TIM_IC_Init(TIM_HandleTypeDef* htim);声明行或只是删除__attribute__((weak)),那么问题就会消失。但我不想手动执行,因为文件是自动生成的。那么这里有什么问题呢?
标签: c stm32 weak-linking cmock