When attempting to call functions in math.h, I’m getting link errors like the following
undefined reference to sqrt
But I’m doing a #include <math.h>
I’m using gcc and compiling as follows:
gcc -Wall -D_GNU_SOURCE blah.c -o blah
Why can’t the linker find the definition for sqrt?
Add -lm to the command when you call gcc:
gcc -Wall -D_GNU_SOURCE blah.c -o blah -lm
This will tell the linker to link with the math library. Including math.h will tell the compiler that the math functions like sqrt() exist, but they are defined in a separate library, which the linker needs to pack with your executable.
As FreeMemory pointed out the library is called libm.a . On Unix-like systems, the rule for naming libraries is lib[blah].a . Then if you want to link them to your executable you use -l[blah] .