Есть несколько причин.Один из них связан со статическими библиотеками, которые могут содержать тысячи различных функций.Но одна программа может использовать только несколько функций, которые есть в конкретной библиотеке.Если бы компоновщик и загрузчик были одной и той же программой, вам пришлось бы поставлять всю статическую библиотеку вместе с вашим приложением.Подумайте о небольшой программе на C ++, размер которой составляет всего несколько килобайт.Он создается путем связывания со статической библиотекой времени выполнения, размер которой много мегабайт.
Если вам требуется, чтобы загрузчик выполнял связывание, вы увеличиваете сложность загрузчика и увеличиваете размер ядра операционной системы.Связывание - чрезвычайно сложная работа, которая может занять значительное время.Это не работа операционной системы.ОС должна заниматься выполнением программ, а не их сборкой.