Почему вы должны связать математическую библиотеку в C? - PullRequest
229 голосов
/ 23 июня 2009

Если я включаю <stdlib.h> или <stdio.h> в программу на C, мне не нужно связывать их при компиляции, но я должен ссылаться на <math.h>, используя -lm с gcc, например:

gcc test.c -o test -lm

В чем причина этого? Почему я должен явно ссылаться на математическую библиотеку, а не на другие библиотеки?

Ответы [ 11 ]

2 голосов
/ 23 июня 2009

stdio является частью стандартной библиотеки C, с которой по умолчанию будет ссылаться gcc.

Реализации математической функции находятся в отдельном файле libm, который не связан по умолчанию, поэтому вы должны указать его -lm. Кстати, между этими заголовочными файлами и библиотеками нет никакой связи.

...