Неопределенная ссылка на pow () в C, несмотря на включение математики.ч [дубликат]


Возможные Дубликаты:
проблема с использованием pow () в C
что такое неопределенная ссылка на `тяп"

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

по сути, я должен написать программу, которая, среди прочего, вычисляет объем сферы от заданного радиуса. Я думал, что буду использовать pow() функции, а не просто используя r*r*r, для дополнительных очков, но компилятор дает мне следующую ошибку:

неопределенная ссылка на 'pow' collect2: ошибка: ld возвратил 1 состояние выхода

мой код выглядит следующим образом:

#include <math.h>

#define PI 3.14159265 //defines the value of PI

/* Declare the functions */
double volumeFromRadius(double radius);

/* Calculate the volume of a sphere from a given radius */
double volumeFromRadius(double radius) {
    return (4.0/3.0) * PI * pow(radius,3.0f);
}

и я компилирую с командой gcc -o sphere sphere.c

это компилируется и отлично работает в code:: blocks на машинах Windows в uni, но на моем Fedora 17 дома компилятор командной строки отказывается работать. Любые мысли будут с благодарностью оценены!

благословения, Ян

1 52

1 ответ:

вам нужно связаться с математической библиотеки:

gcc -o sphere sphere.c -lm

ошибка, которую вы видите:error: ld returned 1 exit status от линкер ld (часть gcc, которая объединяет объектные файлы), потому что он не может найти, где функция pow определяется.

в том числе math.h вводит объявление различных функций, а не их определение. Деф присутствует в математической библиотеке libm.a. Вам нужно связать свою программу с этой библиотекой, чтобы вызовы функций как pow () разрешаются.