undefined reference to `pow'



  • Hallo Zusammen,

    Ich muss einen komplexen fertigen C code mit einem "c compiler" kompilieren. Ich bekomme aber einen komischen Fehler, kann Jemand bitte helfen?

    Um den Fehler zu veranschaulichen habe ich zwei kleine programme geschrieben.

    Follgende Code kann man fehlerfrei kompilieren:

    #include <stdio.h>
    #include <math.h>
    
    int main ()
    {
    	int result = pow(2,3);
    	printf("%d \n", result); 
    	return 0;
    }
    

    Wenn ich den folgenden Code kompiliere,bekomme ich diesen error :

    connectus@ubuntu:~/Desktop/powf$ gcc powf.c
    /tmp/ccVHHnlS.o: In function main': powf.c: (.text+0x2b): undefined reference topow'
    collect2: ld returned 1 exit status

    #include <stdio.h>
    #include <math.h>
    
    int main ()
    {
    	int k=2;  
    	int l=3; 
    	int result = pow(k,l);
    
    	printf("%d \n", result); 
    
    	return 0;
    }
    

    Im Code gibt es viele Funktionen die solche mathematische funktionen enthalten. Was soll ich machen?

    Danke im Voraus



  • Das ist eine Meldung vom Linker. Er findet die eigentliche Funktion von pow() nicht.

    Du musst noch die Fließkommabibliothek mit einbinden.
    Das ist nicht math.h oder eine andere .h

    Du musst bei den Compileroptionen ein -lm mit angeben (kleines LM )



  • Vielen Dank für deine Antwort DirkB.

    Ich habe aber deine Antwort nicht genau verstanden.

    Was ist ein fließkommabibliothek. Wo finde ich es. Ich habe in google auch gesucht aber leider keine nützliche informationen gefunden.

    Kann jemand bitte helfen?



  • Falls du meinst dass ich als "gcc -lm dateiname.c" compilieren soll. Das habe ich probiert. Ich bekomme denselben fehler.



  • Probier mal das -lm am Ende:

    gcc -o dateiname dateiname.c -lm
    


  • Ich liebe dich DirkB



  • Im Manual von GCC steht zu -l

    Gcc Manual schrieb:

    It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but before bar.o. If bar.o refers to functions in `z', those functions may not be loaded.


Anmelden zum Antworten