Решено: Извлечение корня в Си

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

Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Решено: Извлечение корня в Си

Сообщение newsrc »

Я в тупом тупике.

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

#include <stdio.h>
#include <math.h>
#include <limits.h>
#include <errno.h>
#include <float.h>
#include <stdlib.h>

int main(void) {

    double x, y, rez;
    x = 2;
    y = 3;

    rez = pow(x, y);
    return 0;

}


Результат:

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

/tmp/cczg8SG0.o: In function `main':
sampl.c:(.text+0x3e): undefined reference to `pow'
collect2: выполнение ld завершилось с кодом возврата 1


Казалось функция pow() описана в math.h, так же пробовал функцию sqrt()
Последние четыре инсклюда уже на всякий случай от незнания после появления ошибки...
Что инклюдить надо?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: Извлечение корня в Си

Сообщение neol »

cc source.c -lm

из инклудов нужен только #include <math.h>
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Решено: Извлечение корня в Си

Сообщение Nazyvaemykh »

При линковке надо указывать математическую библиотеку? (gcc с флагом -lm).
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Решено: Извлечение корня в Си

Сообщение NickLion »

gcc sampl.c -lm

PS опередили... пока до вкладки добрался :)
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Решено: Извлечение корня в Си

Сообщение newsrc »

Спасибо.

P.S.
Странно, почему так. Не достаточно компилятору инклюда <math.h> в нём не всё описано?
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Решено: Извлечение корня в Си

Сообщение Nazyvaemykh »

Компилятору все понятно. Из заголовочного файла math.h ему понятно, каковы функции pow () и sqrt (), какие параметры они принимают, какие значения возвращают.

Но сама эта функция находится не в библиотеке libc, линкуемой по умолчанию, а в библиотеке libm. Поэтому на стадии линковки необходимо явно указать на использование этой библиотеки.

Можно, например, сначала скомпилировать объектный файл, видно, что компилятору все понятно:
gcc -c sampl.c
Но на этапе линковки нужно указать библиотеку:
gcc -lm sampl.o
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
Аватара пользователя
newsrc
Сообщения: 314
ОС: Slackware

Re: Решено: Извлечение корня в Си

Сообщение newsrc »

Спасибо ещё раз.
Система -- это совокупность элементов и связей, дающая новые свойства, не присущие ни одному из элементов и ни одной из связей.
Спасибо сказали: