Функция __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' применяется только к инициализированным переменным с внешней связью