Функция SQRT () не работает с переменными аргументами [дубликат

StackOverflow https://stackoverflow.com/questions/3533594

Вопрос

Я не знаю, пропустите ли я что-то очевидное, но кажется, что я не могу вычислить квадратные корни Переменная в 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 имя файла

Это работает нормально для меня. Я думаю, что есть некоторые проблемы с вашей математической библиотекой. Попробуйте связать это снова и посмотреть. Другой мудрый код полностью идеален.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top