Сильные и слабые функции не разрешены правильно внутри одной и той же библиотеки - PullRequest
0 голосов
/ 09 марта 2020

Контекст: Компиляция для микроконтроллера STM32 с использованием G CC (arm-none-eabi ...)

У меня есть библиотека, которая упаковывает указанный c код STM32 (HAL.a), этот код включает файл запуска, который объявляет обработчики прерываний как слабые функции. У меня также есть сильные реализации функций той же подписи в той же библиотеке. Эта библиотека связана с кодом приложения. К сожалению, когда-либо связаны только слабые функции, я не могу связать сильные функции!

Чтобы показать структуру:

Application
  main.o
  (links) HAL.a
HAL.a
  stm32_interupts.c.obj
    void SysTick_Handler(void)
  startup_stm32.s.obj
    .weak      SysTick_Handler

Файл карты подтверждает, что слабая реализация всегда выбрана. Я попытался изменить порядок объектных файлов в HAL.a, но это не помогло (подтверждено с помощью arm-none-eabi-ar -tv HAL.a).

Это часть гораздо большего проекта встроенный во многие библиотеки с использованием CMake, поэтому я не могу без необходимости связываться со структурой и имею ограниченный контроль над командной строкой компоновщика.

Есть идеи, как решить эту проблему?

Я видел кучу постов на эту тему, но все они имеют дело с тем, что слабые и сильные реализации разделены между различными библиотеками, и большинство из них не предлагают решения, подходящего для встраиваемых систем (например, --whole-archive). Обычно говорят, что нужно контролировать порядок компоновки библиотек в командной строке, но я предполагаю, что я добиваюсь того же, контролируя порядок объектных файлов внутри моей библиотеки?

Заранее спасибо ...

...