Функция __attribute __ ((слабая)) приводит к неопределенной ссылке - PullRequest
1 голос
/ 19 марта 2019

В настоящее время я пытаюсь настроить 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 Ответ

0 голосов
/ 20 марта 2019

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

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

...