С афайл - PullRequest
       55

С афайл

0 голосов
/ 16 февраля 2019

Моя простая программа 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 Ответ

0 голосов
/ 16 февраля 2019

Похоже, вы уже обнаружили, что ответ - да.

Флаг -lm указывает компоновщику связать математическую библиотеку, которая содержит, помимо прочего, код для cabs функция.(Это проблема gcc / Linux, а не проблема языка C.)

Справочная страница Linux для cabs специально говорит: Link with -lm.

(В общем, если вы хотите позвонить любая функция библиотеки, и вы не уверены на 100%, как ее использовать, прочитайте справочную страницу.)

...