Немогу вызвать sin() из библиотеки <math.h>

Модератор: Модераторы разделов

Аватара пользователя
RazorJack
Сообщения: 113
ОС: Gentoo 2008

Немогу вызвать sin() из библиотеки <math.h>

Сообщение RazorJack »

вот код на СИ

Код: Выделить всё

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main(int argc, char *argv[])
{
    int i=1;
    double stel=0;
    for (;i<10000000;i++)
    {
        stel+=sin(i/1000000.);
    }
    printf("%f",stel);
    return EXIT_SUCCESS;
}

а вот ответ компилятора

Код: Выделить всё

/home/Razor/kdeveloop/huh/src/huh.c:42: undefined reference to `sin'

получается что функция синуса sin() не определена в <math.h> хотя документация говорит обратное.
Уважаемые кодеры помогите разобраться в чем собака зарыта вроде все просто.
Спасибо
PS я так понимаю когда я пишу #include <math.h> то подключается файл /usr/include/math.h открыл его в редакторе дак там обявлений упомянутых функций нет вообще.
Спасибо сказали:
Аватара пользователя
S7a1k3r
Сообщения: 159
Статус: Белгородский LUG
ОС: Arch Linux

Re: Немогу вызвать sin() из библиотеки <math.h>

Сообщение S7a1k3r »

RazorJack писал(а):
14.06.2008 22:46
вот код на СИ

Код: Выделить всё

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


int main(int argc, char *argv[])
{
    int i=1;
    double stel=0;
    for (;i<10000000;i++)
    {
        stel+=sin(i/1000000.);
    }
    printf("%f",stel);
    return EXIT_SUCCESS;
}

а вот ответ компилятора

Код: Выделить всё

/home/Razor/kdeveloop/huh/src/huh.c:42: undefined reference to `sin'

получается что функция синуса sin() не определена в <math.h> хотя документация говорит обратное.
Уважаемые кодеры помогите разобраться в чем собака зарыта вроде все просто.
Спасибо
PS я так понимаю когда я пишу #include <math.h> то подключается файл /usr/include/math.h открыл его в редакторе дак там обявлений упомянутых функций нет вообще.


поиск нынче не работает? :)
Странно работает компоновщик
Спасибо сказали:
Аватара пользователя
Iroln
Сообщения: 201
ОС: openSUSE 10.3

Re: Немогу вызвать sin() из библиотеки <math.h>

Сообщение Iroln »

Для использования математической библиотеки используйте вызов компилятора с ключом -lm

Используйте поиск. Такая тема уже была!
Напрочь отсутствует вызов функции sin
Тайною мир держится
Спасибо сказали:
FoRtNoX
Сообщения: 13
ОС: Debian Lenny/Sid

Re: Немогу вызвать sin() из библиотеки <math.h>

Сообщение FoRtNoX »

Попробуй скомпилировать с аргументом -lm
Компилятор просто не может найти math.h - вот и выдает ошибку
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Немогу вызвать sin() из библиотеки <math.h>

Сообщение uptime »

RazorJack писал(а):
14.06.2008 22:46
а вот ответ компилятора

Код: Выделить всё

/home/Razor/kdeveloop/huh/src/huh.c:42: undefined reference to `sin'

получается что функция синуса sin() не определена в <math.h> хотя документация говорит обратное.
Уважаемые кодеры помогите разобраться в чем собака зарыта вроде все просто.
Спасибо
PS я так понимаю когда я пишу #include <math.h> то подключается файл /usr/include/math.h открыл его в редакторе дак там обявлений упомянутых функций нет вообще.


Посмотрел. math.h подключает инклудом bits/mathcalls.h, который уже и содержит объявление sin. Объявления функций используются компилятором для проверки типов аргументов и возвращаемого значения.
Но в вашем случае дело не в отсутствии объявления, а в отсутствии самой функции. Как, впрочем, уже было сказано выше.

успехов
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
mih-vik
Сообщения: 1
ОС: Fedora10,Ubuntu12(?) M$WinXP

Re: Немогу вызвать sin() из библиотеки <math.h>

Сообщение mih-vik »

Прочел с большим интересом, т.к. никогда в сишных модулях математика не нужна была, и вдруг как всегда срочно, а оно не линкуется, в общем все знают...
Перепробовал в спешке все перечисленное, на моей юбунте катит, если тупо ставить ключ -lm в конце команды вызова, не важно чего - gcc, cc или ld, напр
gcc neuro1.c -lm //получаем a.out
gcc -c neuro1.c // получаем neuro1.o, а затем линкуем его
gcc -o neuro neuro1.o -lm // получаем исполняемый neuro
ЗЫ. Это не спам, а для тех торопыжливых, кому некогда читать все (хотя прочесть - так польза большая будет))))
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Немогу вызвать sin() из библиотеки <math.h>

Сообщение drBatty »

RazorJack писал(а):
14.06.2008 22:46
/home/Razor/kdeveloop/huh/src/huh.c:42: undefined reference to `sin'

получается что функция синуса sin() не определена в <math.h>

на будущее: не определена ссылка (reference). Это не компилятор говорит, а компоновщик(линкер, ld).

Тоже самое будет в таком коде:

Код: Выделить всё

int foo();

int main()
{
    foo();
    return 0;
}

т.е. функция "где-то рядом", но вот найти её не удалось. А скомпилируется это всё отлично.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: