So, I'm pretty sure that, for example, any C library can be combined together
using command like: ar r libXYZ.a *.o from the object folder.
But I suspect, that this is not what is actually done
(because the makefiles use libtool, etc, ...).
What's the purpose of that and how is it done?
Цель libtool - скрыть сложность вызова реальных системных библиотечных инструментов (например, ar , нм , ld , lipo и т. Д.), Чтобы сделать пакет более переносимым в POSIX-подобных ОС. Сценарий . / Configure выведет сценарий libtool во время его выполнения. Сопровождающий пакета не имеет для использования libtool (и полагается на ручной вызов собственных инструментов с правильными флагами), но это облегчает работу.
Как вы и подозревали, инструменты командной строки используются для сборки библиотек, но скрыты за libtool . Вы можете узнать больше о том, как это сделать, изучив один из файлов библиотеки .la , выведенный libtool , но это только часть ответа. Остальная часть ответа зависит от платформы, где библиотеки должны использоваться, поскольку библиотеки могут быть скомпилированы.
What happens behind the linking stage in makefiles compared to simply archiving
the required .o object files?
Опять же, ответ зависит от платформы, где будут использоваться библиотеки. Для статических библиотек обычно достаточно архивировать их с помощью ar . Для динамических библиотек ответ зависит от системы. В сценарий libtool эта информация встроена, поэтому правильная ситуация возникает при вызове make install .