2013-06-07 17 views
8

Hallo, ich benutze Linux 12.04 und Geany für die Codierung. Der Code, den ich in C schreibe, funktionierte völlig in Ordnung, bis ich den Befehl sqrtf benutzte, um die Quadratwurzel eines Floats zu finden. Fehler: HAC3.c :(. Text + 0xfd7): undefinierter Verweis auf `sqrtf '.sqrtf undefinierter Verweis auf `sqrtf 'in c

Der Teil des Codes i sqrtf bin mit:

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 der math.h aber dies scheint nicht das Problem zu sein. Also frage ich mich, gibt es einen Weg, Geany zu reparieren, so wird dies nicht wieder auftauchen? Ich habe wenig Wissen, versuchen Sie es zu erklären, wenn möglich.

+3

sqrtf seit c99. und Linker-Option. zB 'gcc prog.c -std = c99 -lm' – BLUEPIXY

+1

Für zukünftige Referenz: wenn etwas nicht kompiliert/verlinkt: schau dir ** man -k ** an, in deinem Fall ** man - k sqrtf ** ... es wird dir sagen, wie man es benutzt. – tink

+0

was ist man -k sqrtf? –

Antwort

7

Zum Build ->Set Build Commands dann unter C commands klicken Sie auf den leeren Label und es wird Ihnen ein neues Etikett angeben (Name es Link). Geben Sie gcc -Wall -o "%e" "%f" -lm ein - wobei -lm dem Benutzer sagt, dass er die math Bibliothek mit Ihrer App verknüpfen soll. Klicken Sie auf .

Klicken Sie dann auf Build und wählen Sie Ihr neu erstelltes Etikett - Link. Dies sollte es für Sie tun.

+0

Dies ist die perfekte Antwort für meine Frage. Vielen Dank sir :) –

+0

Ich bin froh zu helfen :) – Nobilis

+1

Es ist gut zu beachten, dass die -lm-Flag nach den Dateien angegeben werden muss. Ich hatte einen Fehler, der dadurch verursacht wurde, dass ich das falsch mache. – Flipbed

7

Sie müssen mit -lm verknüpfen, um die mathematischen Funktionen bereitzustellen.

+0

Auf 'man sqrtf' wirst du folgendes bemerken:" Link mit -lm. " –

+0

wie kann ich genau -lm in geany verbinden? Es tut mir leid, aber mein Wissen ist wenig –

Verwandte Themen