Domanda

Quando tento di chiamare funzioni in math.h, ricevo errori di collegamento come i seguenti

undefined reference to sqrt

Ma sto facendo un #include <math.h>
Sto usando gcc e compilando come segue:

gcc -Wall -D_GNU_SOURCE blah.c -o blah

Perché il linker non riesce a trovare la definizione di sqrt?

È stato utile?

Soluzione

Aggiungi -lm al comando quando chiami gcc:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm

Questo dirà al linker di collegarsi con la libreria matematica. Includere math.h dirà al compilatore che le funzioni matematiche come sqrt () esistono, ma sono definite in una libreria separata, che il linker deve impacchettare con il tuo eseguibile.

Come ha sottolineato FreeMemory, la libreria si chiama libm.a. Su sistemi simili a Unix, la regola per nominare le librerie è lib [blah] .a. Quindi se vuoi collegarli al tuo eseguibile usi -l [blah].

Altri suggerimenti

Devi collegare esplicitamente la libreria matematica. Aggiungi -lm alle bandiere che stai passando a gcc in modo che il linker sappia collegare libm.a

Aggiungi -lm alla fine del comando gcc per collegare la libreria matematica:

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

Affinché le cose siano collegate correttamente, l'ordine delle bandiere del compilatore è importante! In particolare, math.h dovrebbe essere posizionato alla fine della riga .

Se ti stai chiedendo perché la <=> libreria debba essere inclusa durante la compilazione in C, dai un'occhiata a questa spiegazione qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top