Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Математические функции "math.h"
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > AVR32
lisstret
Проблема при использовании математический фунций "math.h"
Вообщем там есть такие прототипы:
Код
extern double atan _PARAMS((double));
extern double cos _PARAMS((double));
extern double sin _PARAMS((double));
extern double tan _PARAMS((double));
extern double tanh _PARAMS((double));
extern double frexp _PARAMS((double, int *));
extern double modf _PARAMS((double, double *));
extern double ceil _PARAMS((double));
extern double fabs _PARAMS((double));
extern double floor _PARAMS((double));


допустим нужно посчитать синус:

Код
#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "math.h"

void main(void)
{
    double pi=3.14;
    double s;

    s=sin(pi);
}

При компиляции ошибка: undefined reference to `sin'

Если агрумент просто написать как:

Код
#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "math.h"

void main(void)
{
    double pi=3.14;
    double s;

    s=sin(3.1428571428571428571428571428571);
}

То ошибки нет.

Пробывал тип возращаемого значения как extern double делать, тоже ошибка.

Скажите как правильно пользоваться математическими функциями?
MrYuran
Цитата(lisstret @ Jun 15 2010, 08:11) *
При компиляции ошибка: undefined reference to `sin'

Линкер не находит функцию sin(), на которую ссылается компилятор.
Скорее всего, забыли подключить математическую библиотеку libm.a
Посмотрите на предмет наличия ключа линкера -lm
Цитата
Если агрумент просто написать как:
s=sin(3.1428571428571428571428571428571);
То ошибки нет.

Возможно, значение вычисляется препроцессором (хотя странно, откуда он знает про синус)
jasper
Цитата(MrYuran @ Jun 15 2010, 10:33) *
Линкер не находит функцию sin(), на которую ссылается компилятор.
Скорее всего, забыли подключить математическую библиотеку libm.a
Посмотрите на предмет наличия ключа линкера -lm

Так и есть.
Надо зайти в свойства проекта, т.е. Properties -> C/C++ Build -> Settings. Там на вкладке Tool Settings: AVR32/GNU C Linker -> Libraries.
В поле Libraries (-l) добавить значение m.
lisstret
Вроде че то получилось. А где можно найти документы или что нить почитать об этом?
MrYuran
Цитата(lisstret @ Jun 15 2010, 11:48) *
А где можно найти документы или что нить почитать об этом?

Если первоисточники - то здесь
А производные по конкретным продуктам - ищите во вложенной документации.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.