Функция SQRT () не работает с переменными аргументами [дубликат
-
30-09-2019 - |
Вопрос
Этот вопрос уже имеет ответ здесь:
Я не знаю, пропустите ли я что-то очевидное, но кажется, что я не могу вычислить квадратные корни Переменная в 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 () не должен работать с переменными или что-то в этом роде?
Спасибо за помощь
Решение
Вам нужно связать с библиотекой Math (используйте «-LM» в командной строке). В постоянном случае компилятор, вероятно, является умным и предварительно предшествующим SQRT (2.0) (так что скомпилированный код, по существу «B = 1,414 ...;»)
Другие советы
Вам, вероятно, нужно добавить -lm
когда вы компилируете. Когда вы берете квадратный корень постоянной, компилятор оптимизирует код, принимая квадратный корень во время компиляций, поэтому он не использует sqrt
вообще.
Используйте команду gcc -Wall -o "test2" "test2.c" -lm
что, вероятно, исправит это.
Это включает в себя математическую библиотеку в дополнение к стандартной библиотеке времени выполнения C. В большинстве систем математическая библиотека исторически является отдельной субъектом, которая должна быть явно запрошена.
В случае GCC вам нужно связать библиотеку.
gcc filename.c -lm.
Однако в случае G ++ не нужно связать библиотеку, так что это будет работать нормально:
G ++ Filename.c -o имя файла После успешной компиляции.
Чтобы запустить просто ввести ./filename в G ++. и войти ./a.out в GCC.
Компилировать с:
gcc -Wall -o test2 test2.c -lm
Вам нужно связать по математике.
Включите математическую библиотеку, используя оператор ""
#include " math.h "
Компилировать программу с использованием -lm
Вариант для Inherit Math Library Предположим, наше имя программы test.c
Мы скомпилируем, как следовать
gcc test.c -lm
GCC не связывает стандартные библиотеки по умолчанию. Таким образом, вам просто нужно сделать это, если компиляция через GCC:
gcc filename.c -lm. .
Однако в случае G ++ не нужно связать библиотеку, так что это будет работать нормально:
g ++ filename.c -o имя файла
Это работает нормально для меня. Я думаю, что есть некоторые проблемы с вашей математической библиотекой. Попробуйте связать это снова и посмотреть. Другой мудрый код полностью идеален.