Код: Выделить всё
//main.c
#include <stdio.h>
#include <math.h>
int main ()
{
printf ("%f\n", sin(3));
}
Shell
user@astra:~$ gcc main.c
user@astra:~$
Спасибо, кто откликнется.
Модератор: Модераторы разделов
Код: Выделить всё
//main.c
#include <stdio.h>
#include <math.h>
int main ()
{
printf ("%f\n", sin(3));
}
Shell
user@astra:~$ gcc main.c
user@astra:~$
Она не линкуется. Можете сами проверить с помощью ldd. В вашем случае вызывается встроенная gcc-шная функция, а не функция из математической библиотеки. Стандарт языка этого не требует, но и не запрещает. Кстати, если бы линковалась, это тоже было бы нормально. Это тоже не требуется, но и не запрещено.Почему библиотека libm.so линкуется БЕЗ явного указания?
Shell
mik13@mik13:/run/shm$ cat ts1.c
#include <stdio.h>
#include <math.h>
double s;
int main () {
s=3;
printf ("%f\n",sin(s));
}
mik13@mik13:/run/shm$ gcc ts1.c
/tmp/ccJB5F7y.o: In function `main':
ts1.c:(.text+0x29): undefined reference to `sin'
collect2: error: ld returned 1 exit status[sh]
Да, в мануале сказано, что встроенные функции, являющиеся заменой библиотечных, вызываются только "в некоторых случаях", и если критерии не соблюдены, то вызываются библиотечные функции. Что за критерии, мануал умалчивает, но в большинстве случаев это возможность выполнить функцию на этапе компиляции.