учитывая следующую программу:
#include <math.h>
#include <stdio.h>
int
main(void)
{
double x = sqrt(2);
printf("The square root of two is %f\n", x);
return 0;
}
и компиляция с:
gcc calc.c -o calc
удается? почему не требуется -lm или /usr/lib/blah/libm.so.x
проверка бинарного объекта с помощью ldd дает:
linux-vdso.so.1 (0x00007fff4f5e5000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007feeffd1b000)
/lib64/ld-linux-x86-64.so.2 (0x00007fef000e1000
Нет ссылок на libm. Однако, если я посмотрю на библиотеку libc.so.6 или библиотеку ld-linux-x86-64.so.2 с помощью nm -D, в этих библиотеках нет функции sqrt.
Что тут происходит? Является ли gcc волшебным образом включенным набором общих функций по умолчанию или чем-то еще?