Using sqrtf() in C: "undefined reference to `sqrtf'"
Solution 1
Go to Build
-> Set Build Commands
then under C commands
click on the empty label and it will let you specify a new label (name it Link
). Type in it gcc -Wall -o "%e" "%f" -lm
- where -lm
will tell it to link the math
library to your app. Click OK
.
Then click on Build
and select your newly created label - Link
. This should do it for you.
Solution 2
You need to link with -lm
to provide the math functions.
Solution 3
In addition to the many fine answers here, the portable form of the command that supports C99 version of <math.h>
is specified by POSIX as c99 -l m
. That having been said, every important Linux compiler supports -lm
.
captain monk
Updated on June 05, 2022Comments
-
captain monk almost 2 years
I am using Linux, Ubuntu 12.04 (Precise Pangolin), and Geany for coding. The code I am writing in C worked completely fine until I used the sqrtf command to find the square root of a float.
Error: HAC3.c:(.text+0xfd7): undefined reference to `sqrtf' .
The part of code I am using sqrtf() in:
float syn(float *a, float *b, int dimensions) { float similarity=0; float sumup=0; float sumdown=0; float as=0; float bs=0; int i; for(i=0; i<dimensions; i++) { sumup = sumup + a[i] * b[i]; as = as + a[i] * a[i]; bs = bs + b[i] * b[i]; } sumdown = sqrtf(as) * sqrtf(bs); similarity = sumup / sumdown; return similarity; }
I included math.h, but this doesn't seem to be the problem.
Is there a way to fix Geany so this won't come up again?