C и файл <complex.h>
Моя простая программа compTest.c
#include<stdio.h>
#include<complex.h>
int main(void)
{
double complex z = 1.0 + 1.0 * I;
printf("|z| = %.4f\n", cabs(z));
return 0;
}
При использовании стандартной библиотеки и компиляции с помощью gcc в системе Linux нужно ли включать флаг -lm, чтобы он работал?
Пример:
gcc -o executableName fileName.c -lm
Когда я не получаю, я получаю следующее: /tmp/cc1o7rtt.o: в функции `main':
comTest.c:(.text+0x35): undefined reference to `cabs'
collect2: error: ld returned 1 exit status
1 ответ
Решение
Кажется, вы уже обнаружили, что ответ - да.
-lm
флаг указывает компоновщику связать математическую библиотеку, которая содержит, помимо прочего, код для cabs
функция. (Это проблема gcc/Linux, а не проблема языка Си.)
Справочная страница по Linux для cabs
конкретно говорит Link with -lm.
(В общем, если вы хотите вызвать какую-либо библиотечную функцию и не уверены на 100%, как ее использовать, прочитайте справочную страницу.)