Ответ 1
Из-за нелепой исторической практики, которую никто не хочет исправлять. Консолидация всех функций, требуемых C и POSIX, в один файл библиотеки не только не позволит повторять этот вопрос снова и снова, но также будет экономить значительное количество времени и памяти при динамической компоновке, поскольку каждый связанный с ним .so
файл требует операции файловой системы, чтобы найти и найти его, а также несколько страниц для его статических переменных, перемещений и т.д.
Реализация, в которой все функции находятся в одной библиотеке, а опции -lm
, -lpthread
, -lrt
и т.д. - все без-ops (или ссылка на пустые .a
файлы) отлично совместимы с POSIX и, безусловно, предпочтительнее.
Примечание. Я говорю о POSIX, потому что сам C не указывает ничего о том, как вызывается компилятор. Таким образом, вы можете просто рассматривать gcc -std=c99 -lm
как специфический для реализации способ, с помощью которого компилятор должен быть вызван для согласованного поведения.