В типичном «голом железе» приложение main не возвращает.
main()
действительно может вернуться к коду запуска, который можно настроить для выполнения каких-либо действий после выхода из приложения.Например, перезапустите его, отключите питание или запустите обновление прошивки.В этом случае могут потребоваться статические деструкторы.
Есть ли причина не просто удалять эти символы из сценария компоновщика?
Если main()
никогда не возвращается иexit()
никогда не вызывается, тогда, конечно, вы можете удалить эти символы, но тогда при запуске библиотеки они будут пропущены, и вам нужно будет предоставить функцию для переопределения функции библиотеки, которая перебирает __fini_array
.
Если вы используете newlib
, вы можете перекомпилировать его с помощью --enable-lite-exit
, чтобы пропустить все fini
вещи.