Контекст: Компиляция для микроконтроллера 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). Обычно говорят, что нужно контролировать порядок компоновки библиотек в командной строке, но я предполагаю, что я добиваюсь того же, контролируя порядок объектных файлов внутри моей библиотеки?
Заранее спасибо ...