1

現在、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 レイヤーによって提供されるいくつかの関数をオーバーライドする必要があるため、モック ライブラリを弱いものにする必要があります。そうしないと、複数の定義エラーが発生します。

だから私の質問は、なぜ弱い属性が未定義の参照エラーを引き起こしたのか、どうすればそれを回避できるのでしょうか?

4

1 に答える 1