Por que estou recebendo Fazer a ligação erros ao chamar função no math.h?

StackOverflow https://stackoverflow.com/questions/103407

  •  01-07-2019
  •  | 
  •  

Pergunta

Ao tentar funções de chamada em math.h, eu estou recebendo erros de link como o seguinte

undefined reference to sqrt

Mas eu estou fazendo um #include <math.h>
Estou usando gcc e compilar o seguinte:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

Por que não o ligador encontrar a definição para sqrt?

Foi útil?

Solução

Adicionar -lm ao comando quando você chamar gcc:
gcc -Wall -D_GNU_SOURCE blah.c -o blá -lm

Isto irá dizer o vinculador a ligação com a biblioteca de matemática. Incluindo math.h irá dizer ao compilador que as funções matemáticas como sqrt () existem, mas são definidos em uma biblioteca separada, que as necessidades de vinculador para embalar com seu executável.

Como freeMemory apontou a biblioteca é chamado libm.a. No Unix-like sistemas, a regra para bibliotecas de nomeação é lib [blah] .a. Então se você quiser ligá-los ao seu executável você usa -l [blah].

Outras dicas

Você precisa vincular a biblioteca matemática explicitamente. Adicionar -lm para as bandeiras que você está passando para gcc para que o vinculador sabe a ligação libm.a

Anexar -lm ao final do comando gcc para vincular a biblioteca matemática:

gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

Para que as coisas estar ligada corretamente, a ordem das bandeiras do compilador importa! Especificamente, o -lm deve ser colocado no final da linha .

Se você está se perguntando por que as necessidades da biblioteca math.h para ser incluído em tudo quando compilar em C, veja esta explicação aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top