Por que você precisa de uma opção explícita de compilador `-lm` [duplicado]

Duplicata Possível:
gcc: por que o sinalizador -lm é necessário para vincular a biblioteca de matemática?

De um modo geral, a fim de usar qualquer uma das funções matemáticas além de incluir o arquivo de cabeçalhomath.h você tem que ligar com o linker opção -lm.-l aqui significaria a opção de vinculador para pesquisar da biblioteca específicalibm.o.

Minha pergunta é

Por que o GCC não inclui essa biblioteca por padrão? É porque a biblioteca usa muito o co-processador matemático e é necessário adicionar o bit extra de código para inicializar a inicialização de ponto flutuante (posso usar a terminologia errada aqui)?

Nota

Acabei de rever todas as respostas mencionadas no linkhttp://stackoverflow.com. Isso não faz muito sentido para mim. Existem três razões básicas atribuídas

As bibliotecas padrão têm a garantia de estar disponíveis. Vincular outras bibliotecas posix como pthread explicitamente faz sentido, mas por que temos que fazer um link explícito para uma biblioteca padrão. Mesmo a razão histórica não é muito clara.Por que a libm foi separada da libc?Por que ainda estamos herdando esses comportamentos nos compiladores recentes do gcc? Que simplicidade ela consegue? Aqui está o que testei, sem libm e com libm. The One without libm, eu escrevi minha própria versão de Pow

Aqui está o exemplo

<code>abhibhat@abhibhat-VirtualBox:~/Projects/GIPL6_2$ ls -1 Test_*|xargs -I{} sh -c "echo {} && echo "-----------------" && cat {}"
Test_withlibm.c
-----------------
#include<stdio.h>
#include<math.h>
int main() {
    int i=20;
    double output1=pow(2.618033988749895,i);
    return 0;
    }
Test_withoutlibm.c
-----------------
#include<stdio.h>
#include<math.h>
double Pow(double _X, int _Y)  {
    double _Z = 1;
    for (; _Y; _X *= _X) {
    if (_Y & 1) _Z *= _X;
    _Y >>= 1;
    }
    return _Z; 
    }
int main() {
    int i=20;
    double output1=Pow(2.618033988749895,i);
    return 0;
    }
abhibhat@abhibhat-VirtualBox:~/Projects/GIPL6_2$ gcc Test_withlibm.c -lm -o Main_withlibm.o
abhibhat@abhibhat-VirtualBox:~/Projects/GIPL6_2$ gcc Test_withoutlibm.c -o Main_withoutlibm.o
abhibhat@abhibhat-VirtualBox:~/Projects/GIPL6_2$ objdump -d Main_withoutlibm.o|wc -l
261
abhibhat@abhibhat-VirtualBox:~/Projects/GIPL6_2$ objdump -d Main_withlibm.o|wc -l
241
</code>

questionAnswers(3)

yourAnswerToTheQuestion