Объектный файл (т. Е. Файл с расширением .o) не загружается.Это связано с тем, что ему не хватает критически важной информации о том, как разрешить все символы в нем: в этом случае, в частности, символу println
потребуется дополнительная информация.(Компиляторы C не связывают идентификаторы библиотеки в создаваемых ими объектных файлах, что иногда даже полезно.)
Когда вы связываете объектный файл в разделяемую библиотеку (.so), вы добавляете эту привязку.Как правило, вы также группируете несколько объектных файлов и разрешаете ссылки между ними (плюс еще несколько эзотерических вещей).Это затем делает возможным загрузку результата, так как загрузчик может тогда просто выполнить разрешение ссылок и загрузку зависимостей, о которых он еще не знает.
Переход оттуда к исполняемому файлу, как правило, является просто вопросом добавленияв операционной системе, определенной программой начальной загрузки.Это небольшой фрагмент кода, который ОС запускает, вызывая программу, и обычно работает, загружая остальную часть программы и зависимостей, а затем вызывая main()
с информацией об аргументах.(Он также отвечает за корректный выход, если main вернется.)