Языковые стандарты, такие как ISO C и ISO C ++, не касаются таких вопросов, как связывание.
POSIX требует только, чтобы компилятор c99
поддерживал -lm
и чтобы функции, объявленные в заголовках <math.h>
, <complex.h>
и <fenv.h>
, были доступны для компоновки, если указано -lm
. Это требование можно выполнить, если функции определены в библиотеке, которая связана по умолчанию.
В текущем glibc разделение функций по большей части произвольно, с некоторыми ограничениями в текущей реализации. (Давным-давно поддерживались две библиотеки потоков, поэтому все функции, связанные с потоками, должны были входить в libpthread
, но это уже не так.) Возможны другие подходы: musl помещает все в libc.a
для статического связывания и в динамический компоновщик для динамического компоновки.