Для каких функций предназначена библиотека libm? - PullRequest
0 голосов
/ 05 января 2019

Насколько я знаю, некоторые математические функции содержатся в libc, а другие - в libm. Я обнаружил это экспериментально:

$ nm --dynamic --defined-only /lib/x86_64-linux-gnu/libm.so.6 | grep -w abs 
$ nm --dynamic --defined-only /lib/x86_64-linux-gnu/libc.so.6 | grep -w abs 
T abs

Есть ли требование относительно того, какие математические функции должны быть предоставлены libm? Предоставляют ли libc и libm все математические функции, требуемые стандартом C?

1 Ответ

0 голосов
/ 05 января 2019

Языковые стандарты, такие как ISO C и ISO C ++, не касаются таких вопросов, как связывание.

POSIX требует только, чтобы компилятор c99 поддерживал -lm и чтобы функции, объявленные в заголовках <math.h>, <complex.h> и <fenv.h>, были доступны для компоновки, если указано -lm. Это требование можно выполнить, если функции определены в библиотеке, которая связана по умолчанию.

В текущем glibc разделение функций по большей части произвольно, с некоторыми ограничениями в текущей реализации. (Давным-давно поддерживались две библиотеки потоков, поэтому все функции, связанные с потоками, должны были входить в libpthread, но это уже не так.) Возможны другие подходы: musl помещает все в libc.a для статического связывания и в динамический компоновщик для динамического компоновки.

...