функция sqrt() не работает с переменными аргументами
Я не знаю, пропустил ли я что-то очевидное, но похоже, что я не могу вычислить квадратные корни переменная в C; функция sqrt () работает только на константах. Вот мой код:
#include <math.h>
#include <stdio.h>
int main()
{
double a = 2.0;
double b = sqrt(a);
printf("%f", b);
return 0;
}
когда я запускаю программу, я получаю следующую ошибку:
gcc -Wall -o "test2" "test2.c" (in directory: /home/eddy/Code/euler)
/tmp/ccVfxkNh.o: In function `main':
test2.c:(.text+0x30): undefined reference to `sqrt'
collect2: ld returned 1 exit status
Compilation failed.
однако, если я заменю аргумент в sqrt () константой, такой как 2.0, например, (b = sqrt(2.0)
), то он работает нормально. Это sqrt() не должен работать с переменными или что-то?
Спасибо за помощь
8 ответов
вам нужно связаться с математической библиотекой (используйте '-lm' в командной строке). В постоянном случае компилятор, вероятно, является умным и предварительно вычисляет sqrt (2.0) (поэтому скомпилированный код по существу 'b = 1.414...;')
вероятно, вам нужно добавить -lm
при компиляции. Когда вы берете квадратный корень константы, компилятор оптимизирует код, беря квадратный корень во время компиляции, поэтому он не использует sqrt
на всех.
используйте команду gcc -Wall -o "test2" "test2.c" -lm
что, вероятно, исправит это.
Это включает в себя математическую библиотеку в дополнение к стандартной библиотеке времени выполнения C. В большинстве систем математическая библиотека исторически является отдельным объектом, который необходимо явно запросить.
в случае gcc вам нужно связать библиотеку.
имя файла gcc.к-лм .
однако в случае g++ нет необходимости связывать библиотеку, так что это будет работать нормально:
G++ и именем.c-o имя файла Как только компиляция будет успешной.
для запуска просто введите ./ имя файла в G++. и входите .a.в Gcc.
скомпилировать с помощью:
gcc -Wall -o test2 test2.c -lm
вам нужно связать с математической библиотекой.
включить математическую библиотеку с помощью оператора""
#include " math.h "
компиляция программы с помощью -lm
опция для наследования математической библиотеки
предположим, что наша программа называется test.c
мы компилируем как следовать
gcc test.c -lm
gcc по умолчанию не связывает стандартные библиотеки. Поэтому вам просто нужно сделать это, если компиляция через gcc:
имя файла gcc.c-lm .
однако в случае g++ нет необходимости связывать библиотеку, так что это будет работать нормально:
G++ и именем.c-o filename
Это отлично работает для меня. Я думаю, что есть некоторые проблемы с ur math library. Попробуйте связать его еще раз и увидите. Другой мудрый код полностью совершенен.