LINUX.ORG.RU

Некоторые непонятки с С


0

0

1. Почему так ?

#include <math.h>

d = log10(100.0);
gcc ...

/tmp/cclBwyx3.o: In function `main':
test.c:(.text+0x5d8): undefined reference to `log10'
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [all] Ошибка 1

anonymous

Раз #include <math.h>, то надо gcc c ключём -lm запускать.

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

Как уже написали выше, необходимо использовать ключ -lm

anonymous
()

Хм... А где же ключ lm?
//какбэ капчА musorer

anonymous
()

попробуй -lm

anonymous
()

Думаю, нужен ключ -lm

anonymous
()

Мне в этом случае помогал ключ -lm для gcc.

UVV ★★★★★
()

Надо слинковать математическую библиотеку ключиком -lm

Deleted
()

А как в eclipse библиотеки прилинковывать ? Типа -lm -lncurses и т.д.

anonymous
()
Ответ на: комментарий от redgremlin

Значит я беру сгенеренный eclips'ом Makefile и там в строке
gcc  -o"Converting" $(OBJS) $(USER_OBJS) $(LIBS)

добовляю -lm (gcc -lm ...) Компилю, а он гад затирает -lm...

anonymous
()

ходят слухи, что во всём виновато отсутствие ключа -lm
впрочем, информация недостоверна

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

> Значит я беру сгенеренный eclips'ом Makefile

В этом треде обсуждают необходимость ключа -lm. Свали в новый тред, пожалуйста.

// spoking

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

-lm не нужен. У меня в Microsoftⓡ Visual Studioⓡ 2008™ всё и так работает.

Legioner ★★★★★
()

Как уже верно заметили, -lm не нужен. Настоящий мужчина должен сам
писать себе драйвера и математические функции. Но, если не можешь,
я тебе свой кусок кину :)

/*
 * ====================================================
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
 *
 * Developed at SunPro, a Sun Microsystems, Inc. business.
 * Permission to use, copy, modify, and distribute this
 * software is freely granted, provided that this notice
 * is preserved.
 * ====================================================
 */


double log10(double x)
{
    double y,z;
    int32_t i,k,hx;
    u_int32_t lx;

    EXTRACT_WORDS(hx,lx,x);

        k=0;
        if (hx < 0x00100000) {          /* x < 2**-1022  */
            if (((hx&0x7fffffff)|lx)==0)
                return -two54/(x-x);        /* log(+-0)=-inf */
            if (hx<0) return (x-x)/(x-x);   /* log(-#) = NaN */
            k -= 54; x *= two54; /* subnormal number, scale up x */
        GET_HIGH_WORD(hx,x);
        }
    if (hx >= 0x7ff00000) return x+x;
    k += (hx>>20)-1023;
    i  = ((u_int32_t)k&0x80000000)>>31;
        hx = (hx&0x000fffff)|((0x3ff-i)<<20);
        y  = (double)(k+i);
    SET_HIGH_WORD(x,hx);
    z  = y*log10_2lo + ivln10*__ieee754_log(x);
    return  z+y*log10_2hi;
}

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