gcc выдает ошибку при использовании fmod () - PullRequest
2 голосов
/ 09 июля 2010

Пример кода для fmod:

#include <stdio.h>    
#include <math.h>

int main(void)   
{    
  double x = 0.14527, y = 3.14159;   
  printf("fmod(x, y) = %.6lf\n", fmod(x, y));    
  return 0;    
}

Компиляция:

$ gcc main.c -o main

Я получаю

/ tmp / ccztJO01.o: в функции `main ':

main.c :(. Text + 0x4d): неопределенная ссылка на `fmod '

collect2: ld вернул 1 статус выхода

Тогда я нашел это в Google:

$ gcc -lm main.c -o main

Почему я должен использовать -lm, что именно? Откуда я могу получить более подробную информацию о gcc?

Ответы [ 3 ]

7 голосов
/ 09 июля 2010

-lm просто говорит ему ссылку libm, которая содержит все математические процедуры с плавающей запятой, включая (не удивительно) fmod.

1 голос
/ 23 декабря 2018

При вводе gcc -lm main.c -o main я все еще получаю ошибку компоновщика. Мне нужно написать gcc main.c -lm -o main для правильной работы. Если это работает для вас по-другому, это немного странно. Я понимаю, что компоновщик найдет символ, объявленный в main.c (т.е. double fmod(double,double)), но разрешит его, только если найдет свое определение позже (т.е. в libm.a).

Короче говоря, библиотеки должны быть размещены (хотя бы один раз) "справа" от места, где они используются.

1 голос
/ 09 июля 2010

Жалуется не компилятор, а компоновщик , ld.Он не может найти подпрограмму fmod в вашей программе.Вы должны указать это для связи с математической библиотекой libm с флагом -l.

[Много] больше информации: GCC, Коллекция компиляторов GNU .

...