undefined reference to 'sqrt'
-
Hallo.
Ich habe ein Programm geschrieben, das mir die Summe aller Divisoren liefert.
Zuerst kam die Fehlermeldung trotz eingebundenem Header <math.h>/tmp/ccjjn8oj.o: In function `main': divsum.c:(.text+0x41): undefined reference to `sum_div' collect2: Fehler: ld gab 1 als Ende-Status zurückLaut google musste ich dann beim kompilieren noch das Flag "lm" mitgeben.
stattgcc divsum.c -o divsumgcc divsum.c -o divsum -lmNun läuft das Programm.
Das Programm will ich aber auf die Seite hochladen: http://www.spoj.com
Dort bekomme ich einen kompilierfehler.
Nun meine Frage: Warum muss ich das "lm" anhängen? Gibts keine andere Lösung, ohne ein zusätzliches Flag?Hier noch der Code:
#include <stdio.h> #include <math.h> int sum_of_div( int n ); int main(void) { int loop; int number; scanf( "%d", &loop ); while( loop-- ) { scanf( "%d", &number ); printf( "%d\n", sum_of_div( number ) ); } return 0; } int sum_of_div( int n ) { int sum = 1; int i; int end; end = sqrt( n ); for( i = 2; i <= end; i++ ) if( n%i == 0 ) sum += ( i + n/i ); if( ( end*end ) == n ) sum -= end; return sum; }
-
Sende es als C++ ein, da wird lm dazugelinkt.
-
Das
-lmbindet die Fließkommabibliothek (libm) mit zu deinem Programm.undefined reference to 'sqrt'ist auch ein Meldung vom Linker und nicht vom Compiler.Wie lautet denn die Fehlermeldung von spoj.com?
Du kannst deine Schleifenbedingung ändern von
i <= endini*i <= n