Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Проблема с math.h  (Прочитано 4740 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ASTAPP

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Проблема с math.h
« : 25 Июля 2011, 20:09:18 »
Не работает функция exp, если в качестве параметра передавать переменную, а не константу.

Работает:
double a = exp(2.13);

Не работет:
double a = 2.13;
a = exp(a);

Ошибка выдает в процессе линковки:
/tmp/ccTAUVFt.o: In function `main':
1.c:(.text+0x1b): undefined reference to `exp'
collect2: ld returned 1 exit status



В каталоге /usr/lib/syslinux/com32/include посмотрел на math.h
Там было савсем не то, что (как мне кажется) должно быть:

#ifndef _MATH_H
#define _MATH_H

#ifndef __DBL_MIN_EXP__
# define __DBL_MIN_EXP__ (-1021)
#endif
#ifndef __DBL_MAX_EXP__
# define __DBL_MAX_EXP__ 1024
#endif

double pow(double, double);
double fabs(double);
double strtod(const char *, char **);

#endif /* _MATH_H */


У меня Ubuntu 11.04, gcc 4.4.5



Внимание вопрос:
1)Почему от константы exp работает нормально, а от переменной ругаться?
2)Почему у меня такая хренатня в math.h?
3)Как мне починить math.h? Достаточно ли будет просто заменить math.h или там и исполняемый код тоже кривой может быть?


Всем заранее огромное спасибо.


PetrovSE

  • Гость
Re: Проблема с math.h
« Ответ #1 : 25 Июля 2011, 20:30:27 »
1. exp от константы мог посчитать компилятор
2. линкеру сказали -lm ?
3. math.h менять не нужно ни в коем случае!

Оффлайн ASTAPP

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Re: Проблема с math.h
« Ответ #2 : 25 Июля 2011, 21:19:03 »
2. линкеру сказали -lm ?
После того как сказал - заработало. А что он делает?

PetrovSE

  • Гость
Re: Проблема с math.h
« Ответ #3 : 25 Июля 2011, 21:24:31 »
опция -l задаёт подключаемые библиотеки
общий принцип такой: если требуемая библиотека называется libNNN.a, то подключать нужно через -lNNN

в частности, -lm подключает библиотеку libm.a, которая содержит все математические функции


Оффлайн alexander.pronin

  • Старожил
  • *
  • Сообщений: 2539
    • Просмотр профиля
Re: Проблема с math.h
« Ответ #4 : 26 Июля 2011, 08:20:49 »
Когда у Вас была константа, то компилятор на уровне компиляции все сосчитал.
Когда Вы ввели переменную, то реально в процессе выполнения требуется библиотека, для константы - нет.

 

Страница сгенерирована за 0.016 секунд. Запросов: 21.