Решено: sqrt из math.h и структуры (undefined reference to `sqrt')

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

Аватара пользователя
--=Civil696=--
Сообщения: 227
ОС: Gentoo o_O

Решено: sqrt из math.h и структуры

Сообщение --=Civil696=-- »

пишу вот такой код: # на самом деле это не всё, но остальное компилится и работает...

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

#include <math.h>
struct vect {
    double x;
    double y;
    };

double vectdlina(struct vect a)
{
    return sqrt(a.x * a.x + a.y * a.y);
}

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

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

navi C $ cc myvector.c
/tmp/cc4W8xkO.o: In function `vectdlina':
myvector.c:(.text+0x108): undefined reference to `sqrt'
collect2: выполнение ld завершилось с кодом возврата 1

самое интересное, что в K&R, в самом начале главы о структурах, есть аналогичный код:

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

struct point pt;
double dist, sqrt(double);

dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y);

но вот это:

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

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

struct point {
    int x;
    int y;
};

int main () {
    double c, sqrt(double);
    struct point a = { 12 , 3 };

    c = sqrt((double) a.x * a.x + a.y * b.y);
    printf("%.f", c);

    return 0;
}

тоже не компилится

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

navi C $ cc point.c
/tmp/ccBEtljl.o: In function `main':
point.c:(.text+0x6e): undefined reference to `sqrt'
collect2: выполнение ld завершилось с кодом возврата 1


где я ошибся? :unsure:
НЕ ПАНИКУЙ © ^_~
Спасибо сказали:
fulltick
Сообщения: 25

Re: Решено: sqrt из math.h и структуры

Сообщение fulltick »

$ cc myvector.c -lm
Спасибо сказали:
Аватара пользователя
--=Civil696=--
Сообщения: 227
ОС: Gentoo o_O

Re: Решено: sqrt из math.h и структуры

Сообщение --=Civil696=-- »

fulltick писал(а):
17.10.2008 01:22
$ cc myvector.c -lm
Хм... Надо будет, помимо чтения книжек по C, ман к gcc наконец почитать, хотябы по диагонали... >_<
Спасибо большое... :blush:
Тему можно закрывать :)
НЕ ПАНИКУЙ © ^_~
Спасибо сказали:
Аватара пользователя
e7reactor
Сообщения: 16
ОС: Linux

Re: Решено: sqrt из math.h и структуры

Сообщение e7reactor »

--=Civil696=-- писал(а):
17.10.2008 01:28
fulltick писал(а):
17.10.2008 01:22
$ cc myvector.c -lm
Хм... Надо будет, помимо чтения книжек по C, ман к gcc наконец почитать, хотябы по диагонали... >_<
Спасибо большое... :blush:
Тему можно закрывать :)


подождите, незакрывайте...
вот у меня такая же шляпа получается. Написал прогу, вней синусы, косинусы, корень квадратный
делаю

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

gcc fourier.c -lm -o fourier

заметте -lm пишу!!!
а он пишет

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

fourier.c:(.text+0x56c): undefined reference to `Sqrt'

Подскажите как всё таки бороться с компилятором?
Спасибо заранее
Изображение
Linux OpenSuSE 11.0
Спасибо сказали:
shotdownsystem
Сообщения: 423
ОС: Basic command interpreter

Re: Решено: sqrt из math.h и структуры

Сообщение shotdownsystem »

e7reactor писал(а):
17.12.2010 16:38
[
а он пишет

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

fourier.c:(.text+0x56c): undefined reference to `Sqrt'

Подскажите как всё таки бороться с компилятором?
Спасибо заранее

Sqrt с маленькой буквы
puts ("Working, please wait...");while(1);
Спасибо сказали:
Аватара пользователя
e7reactor
Сообщения: 16
ОС: Linux

Re: Решено: sqrt из math.h и структуры

Сообщение e7reactor »

shotdownsystem писал(а):
17.12.2010 16:59
Sqrt с маленькой буквы

да и с маленькой так же
Изображение
Linux OpenSuSE 11.0
Спасибо сказали:
shotdownsystem
Сообщения: 423
ОС: Basic command interpreter

Re: Решено: sqrt из math.h и структуры

Сообщение shotdownsystem »

e7reactor писал(а):
17.12.2010 17:00
shotdownsystem писал(а):
17.12.2010 16:59
Sqrt с маленькой буквы

да и с маленькой так же

тогда текст программы
и ls -l |grep libm
puts ("Working, please wait...");while(1);
Спасибо сказали:
Аватара пользователя
e7reactor
Сообщения: 16
ОС: Linux

Re: Решено: sqrt из math.h и структуры

Сообщение e7reactor »

shotdownsystem писал(а):
17.12.2010 17:02
тогда текст программы
и ls -l |grep libm


Как пожелаете:
Spoiler

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

#include <stdio.h>
#include <math.h>
void main( void );
float geta ( double );
float getb ( double );
float getsee ( void );
float g( double );
double width = 0.0001;
double rightorleft=0;
int numterms=10;
double T=1;
double f=1;
void main( void) {
    double a[ numterms + 1], b[ numterms + 1], c, ctoo, n;
    int i, j;
    printf( "\n" );
    c = getsee( );
    for ( n=1; n <= numterms; n++ ) {
        i = n;
        a[ i ] = geta( n );
    }
    for ( n=1; n <= numterms; n++ ) {
        i = n;
        b[ i ] = getb( n );
    }
    rightorleft = width;
    ctoo = getsee();
    for ( i = 1; i <= numterms; i++ ) {
        printf( "%s%d%s", "a", i, " is: " );
        printf( "%lf", a[ i ]);
        printf( "%s%d%s", "                  b", i , " is: ");
        printf( "%lf\n", b[ i ]);
    }
    printf( "\n%s%lf\n", "c is ", c );
    printf( "%s%lf\n\n", "ctoo is ", ctoo );

}

float geta( double n ) {
    double i;
    float total = 0;
    double end;
    if (rightorleft==0) end = T - width;
    else end = T;

    for ( i = rightorleft; i <= end; i+=width)
        total += width * ( g( i ) * cos(6.28 * n * f * i ) );
    total *= 2/T;
    return total;
}

float getb( double n ) {
    double i;
    float total = 0;
    double end;

    if (rightorleft == 0 ) end = T - width;
    else end = T;

    for ( i = rightorleft; i<= end; i+=width)
        total += width * ( g( i ) * sin(6.28 * n * f * i ) );
    total *= 2/T;
    return total;
}


float getsee(void) {
    double i;
    float total = 0;
    double end;

    if (rightorleft == 0 ) end = T - width;
    else end = T;

    for ( i = rightorleft; i <= end; i+= width )
        total += width * g( i );
    total *= 2/T;
    return total;
}

float g( double t ) {
    return sqrt(1/( 1 + t ));
}



попытка компиляции:

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

> gcc fourier1.c
fourier1.c: In function ‘main’:
fourier1.c:13: warning: return type of ‘main’ is not ‘int’
/tmp/ccl5MK1w.o: In function `geta':
fourier1.c:(.text+0x39c): undefined reference to `cos'
/tmp/ccl5MK1w.o: In function `getb':
fourier1.c:(.text+0x471): undefined reference to `sin'
/tmp/ccl5MK1w.o: In function `g':
fourier1.c:(.text+0x5a2): undefined reference to `sqrt'
collect2: ld returned 1 exit status
>


ls -l:

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

-rw-r--r-- 1 name user     1777 Дек 18 12:03 fourier1.c

ecли ls -l | grep libm, то выдаёт пустую строку.
Изображение
Linux OpenSuSE 11.0
Спасибо сказали:
Аватара пользователя
agentprog
Сообщения: 362
Статус: Ad Astra per aspera
ОС: openSUSE 11.4, Arch

Re: Решено: sqrt из math.h и структуры

Сообщение agentprog »

e7reactor писал(а):
17.12.2010 16:38
заметте -lm пишу!!!

e7reactor писал(а):
18.12.2010 09:10
> gcc fourier1.c

где?

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

agent@notebook:~> gcc -o tm tm.c -lm
agent@notebook:~> ./tm

a1 is: 0.014061                  b1 is: 0.089179
a2 is: 0.003285                  b2 is: 0.046068
a3 is: 0.001108                  b3 is: 0.030927
a4 is: 0.000328                  b4 is: 0.023255
a5 is: -0.000036                  b5 is: 0.018628
a6 is: -0.000234                  b6 is: 0.015536
a7 is: -0.000354                  b7 is: 0.013325
a8 is: -0.000432                  b8 is: 0.011664
a9 is: -0.000486                  b9 is: 0.010373
a10 is: -0.000524                  b10 is: 0.009339

c is 1.656883
ctoo is 1.656825

agent@notebook:~>


и да, main() по хорошему int возвращает, хоть это и не критично в данном случае.
No problems - just solutions!
Спасибо сказали:
shotdownsystem
Сообщения: 423
ОС: Basic command interpreter

Re: Решено: sqrt из math.h и структуры

Сообщение shotdownsystem »

e7reactor писал(а):
18.12.2010 09:10
ls -l:

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

-rw-r--r-- 1 name user     1777 Дек 18 12:03 fourier1.c

ecли ls -l | grep libm, то выдаёт пустую строку.

имелось ввиду
ls -l /lib | grep libm
если еще актуально
puts ("Working, please wait...");while(1);
Спасибо сказали:
Аватара пользователя
e7reactor
Сообщения: 16
ОС: Linux

Re: Решено: sqrt из math.h и структуры

Сообщение e7reactor »

shotdownsystem писал(а):
18.12.2010 12:19
имелось ввиду
ls -l /lib | grep libm
если еще актуально


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

~> ls -l /lib | grep libm
-rwxr-xr-x  1 root root  171996 Дек 17  2008 libm-2.8.so
-rwxr-xr-x  1 root root   14324 Дек 17  2008 libmemusage.so
lrwxrwxrwx  1 root root      11 Дек 25  2009 libm.so.6 -> libm-2.8.so


agentprog писал(а):
18.12.2010 10:38
где?

Не знаю. У Вас видимо всё нормально. а у меня хрень какая-то с gcc
Изображение
Linux OpenSuSE 11.0
Спасибо сказали:
hippi90
Сообщения: 83
ОС: Debian testing

Re: Решено: sqrt из math.h и структуры

Сообщение hippi90 »

А libc6-dev стоит?
Спасибо сказали:
Аватара пользователя
Илуватар
Сообщения: 295
Статус: Antic1tizen 0ne
ОС: Debian Wheezy/Sid amd64

Re: Решено: sqrt из math.h и структуры

Сообщение Илуватар »

e7reactor, смотрите по теме:

1) Компилите с -lm и с Sqrt вместо sqrt
2) Указывают на ошибку с S-s
3) Компилите с sqrt но _без_ -lm - в результате получаете ошибку автора темы
4) Агент подсказывает нужное направление наводящим вопросом в своём посте, однако вы его не видите.

Сделайте всё правильно и выложите результат - не мучьте себя и комьюнити и дайте себя спасти (:
† Obiit animus, natus est atomus †
Спасибо сказали:
Аватара пользователя
e7reactor
Сообщения: 16
ОС: Linux

Re: Решено: sqrt из math.h и структуры

Сообщение e7reactor »

Илуватар писал(а):
19.12.2010 06:49
e7reactor, смотрите по теме:

1) Компилите с -lm и с Sqrt вместо sqrt
2) Указывают на ошибку с S-s
3) Компилите с sqrt но _без_ -lm - в результате получаете ошибку автора темы
4) Агент подсказывает нужное направление наводящим вопросом в своём посте, однако вы его не видите.

Сделайте всё правильно и выложите результат - не мучьте себя и комьюнити и дайте себя спасти (:


Вот сейчас откомпилю с sqrt с маленькой буковки, и с -lm, и покажу результат
Может быть я уже пал настолько что спасти меня невозможно :))

О чудо! Получилось!

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

>gcc fourier1.c -lm -o four
fourier1.c: In function ‘main’:
fourier1.c:13: warning: return type of ‘main’ is not ‘int’
> ./four

a1 is: 0.014061                  b1 is: 0.089179
a2 is: 0.003285                  b2 is: 0.046068
a3 is: 0.001108                  b3 is: 0.030927
a4 is: 0.000328                  b4 is: 0.023255
a5 is: -0.000036                  b5 is: 0.018628
a6 is: -0.000234                  b6 is: 0.015536
a7 is: -0.000354                  b7 is: 0.013325
a8 is: -0.000432                  b8 is: 0.011664
a9 is: -0.000486                  b9 is: 0.010373
a10 is: -0.000524                  b10 is: 0.009339

c is 1.656883
ctoo is 1.656825

>

Спасибо, Небеса!!!
Изображение
Linux OpenSuSE 11.0
Спасибо сказали:
Аватара пользователя
Илуватар
Сообщения: 295
Статус: Antic1tizen 0ne
ОС: Debian Wheezy/Sid amd64

Re: Решено: sqrt из math.h и структуры

Сообщение Илуватар »

Пожалуйста (:
† Obiit animus, natus est atomus †
Спасибо сказали: