Цитата(yanvasiij @ Mar 31 2016, 13:21)

1) Когда я добавляю syscalls.o в статическую библиотеку вместе со всем остальным, то при компиляции приложения с использованием этой либы вылазит ошибка:
Код
c:/program files (x86)/gnu tools arm embedded/4.9 2015q2/bin/../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/lib/armv7-m\libg.a(lib_a-abort.o): In function `abort':
abort.c:(.text.abort+0xa): undefined reference to `_exit'
Но все перечисленные функции реализованы в syscalls.c! Почему он их не видит?!
Покажите полностью команду, которая завершается приведенными Вами выше ошибками.
Покажите также (для полноты понимания ситуации) вывод команд:
objdump -a <
ваша библиотека> | grep syscalls
nm <
ваша библиотека> | grep _exit
Цитата(demiurg_spb @ Mar 31 2016, 17:06)

Попробуйте поменять очерёдность включения библиотек, как ни странно, но это роялит...
Ничего странного в этом нет. Если Вы при линковке, к примеру, сначала укажете библиотеку с файлом syscalls.o, на символы которого ссылок нет, то линкер, естественно, syscalls.o из библиотеки не загрузит. А потом Вы, допустим, укажете фйл, ссылающийся на что-то из syscalls.o - и, естественно, получите ошибку "символ не определен". Точно так же очевидно, что если Вы поменяете местами этот файл с библиотекой, ошибки не будет, так как на момент чтения библиотеки у линкера уже будет неопределенная ссылка, скажем, на тот же _exit, и линкер разрешит ее загрузкой syscalls.o из библиотеки.