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%, как ее использовать, прочитайте справочную страницу.)

Другие вопросы по тегам