現在、MinGW と CMake を使用して STM32 の単体テスト用に CMock をセットアップしようとしています。構成ファイルで、: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 レイヤーによって提供されるいくつかの関数をオーバーライドする必要があるため、モック ライブラリを弱いものにする必要があります。そうしないと、複数の定義エラーが発生します。
だから私の質問は、なぜ弱い属性が未定義の参照エラーを引き起こしたのか、どうすればそれを回避できるのでしょうか?