Using sqrtf() in C: "undefined reference to `sqrtf'"

captain monk picture captain monk · Jun 7, 2013 · Viewed 13.4k times · Source

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?

Answer

Nobilis picture Nobilis · Jun 7, 2013

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.