LINUX.ORG.RU

[c] Проблема с функцией pow

 


0

2

Учу С. Застрял на таком примере:

#include <stdio.h>
#include <ctype.h>
#include <math.h>
#undef atof

/*atof: преобразование строки s в double */
double atof (char s[])
{
    double val, power, exp;
    int i, sign, esign;
    for (i = 0; isspace(s[i]); i++)
        ; /* игнорирование левых символов-разделителей */
    sign = (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] == '-')
        i++;
    for (val = 0.0; isdigit(s[i]); i++)
        val = 10.0 * val + (s[i] - '0');
    if (s[i] == '.')
        i++;
    for (power = 1.0; isdigit(s[i]); i++)
    {
        val = 10.0 * val + (s[i] - '0');
        power *= 10.0;
    }
    if (s[i] == 'e' || s[i] == 'E')
        i++;
    esign = (s[i] == '-') ? -1 : 1;
    if (s[i] == '+' || s[i] == '-')
        i++;
    for (exp = 0.0; isdigit(s[i]); i++)
        exp = 10.0 * exp + (s[i] - '0');
    return pow(sign * val / power, esign * exp);
}

int main(int argc, char **argv)
{
	printf("%f", atof("123.45e-6"));
	return 0;
}
Сборка почему то не идет
gcc -Wall -o "u4_2" "u4_2.c"
                                          
/tmp/ccZuJ2qw.o: In function `atof':
u4_2.c:(.text+0x209): undefined reference to `pow'
collect2: ld returned 1 exit status
Что я не так делаю (или чего нужного не делаю)?

Ответ на: комментарий от fads

Спасибо всем за помощь. Я думал что #include <math.h> будет достаточно, а оно вон как.

sergijoo
() автор топика
Ответ на: комментарий от encyrtid

Только что вычитал что это libm.а, а не libm.so и линковка получается статическая. [quote] -lбиблиотека

Ищет при линковке библиотеку с именем 'библиотека'. Линкер просматривает стандартный список каталогов в поиске библиотеки, который, фактически, является файлом с именем `libбиблиотека.a'. [/quote]

sergijoo
() автор топика
Ответ на: комментарий от sergijoo

Только что вычитал что это libm.а, а не libm.so и линковка получается статическая.

Посмотри что покажет

ldd твоя_программа

Deleted
()
Ответ на: комментарий от sergijoo
#include <math.h>

int main()
{
  double x = pow(2.0, 2.0);
  return 0;
}

Скомпиль и запусти под strace и смотри какие библиотеки и откуда он вызывает...

encyrtid ★★★★★
()
Ответ на: комментарий от encyrtid

Да действительно libm.so. Буду с библиотеками разбираться позже а то окончательно запутаюсь.

sergijoo
() автор топика
Ответ на: комментарий от mi_estas

Заглядывал

man gcc    
        
Нет справочной страницы для gcc
Смотрите 'man 7 undocumented' в справке, если недоступны справочные страницы.
sergijoo
() автор топика
Ответ на: комментарий от sergijoo

Выкини свой дистрибутив. В арче все прекрасно работает.

arknir
()
Ответ на: комментарий от sergijoo

>man gcc

Нет справочной страницы для gcc

Смотрите 'man 7 undocumented' в справке, если недоступны справочные страницы.



Установить документацию, не?

Dimanc ★★
()
Ответ на: комментарий от sergijoo

Нет справочной страницы для gcc

ой, бида-бида. шо ж теперь делать то?

даже на ответах знают где посмотреть man gcc даже без установленного unix.

mi_estas
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.