Функция __attribute__((слабая)) приводит к неопределенной ссылке

В настоящее время я пытаюсь настроить CMock для модульного тестирования STM32 с использованием MinGW и CMake. В моем конфигурационном файле я установил параметр: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, мне нужно сделать макетированную библиотеку слабой, иначе это приведет к множественным ошибкам определения.

Итак, мой вопрос: почему слабый атрибут вызвал неопределенную ошибку ссылки и как я могу ее обойти?

1 ответ

Решение

Очевидно, что MinGW не поддерживает слабые атрибуты. Когда я перееду в Ubuntu, тогда все в порядке.

Не уверен, что я прав, но все еще может быть альтернатива слабому атрибуту для MinGW, то есть использовать __declspec(selectany), но кажется, что это только для переменной, потому что, когда я применяю функцию, это дает мне это Атрибут error 'selectany' применяется только к инициализированным переменным с внешней связью

Другие вопросы по тегам