Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

You need to link with -lm to provide the math functions.

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top