[C] Problemi libreria <math.h>

hamming_burst
Salve,
vorrei un parere su di un problema che mi è capitato nell'ultimo mese.

Compilando con gcc (in Linux) del codice con inclusa la libreria dello standard C: math.h
mi ritorna un errore di "undefined reference" cosa mai successa prima.

Es di codici idioti

questo compila:
#include <math.h>

int main(){

pow(2.0,3.0);

return 0;
}


questo non compila:
#include <math.h>

int main(){

double a,c;
int i=0;

while(i<100){
	a= pow(2.0,(double)i);
	c=a;
	a=c;
i++;
}
return 0;
}

messaggio di ritorno:
/tmp/ccgnV7BL.o: In function `main':
cc.c:(.text+0x27): undefined reference to `pow'
collect2: ld returned 1 exit status


Le varianti dell'ambiente di compilazione, rispetto ad un periodo antecedente al problema sono:
- passaggio da Xubuntu 11.04 a 11.10
- da kernel 2.bla.bla a 3.0.0-13-generic
- utilizzo delle Glib del C libglib2.0-0 versione 2.31.3 invece delle standard di ubuntu 2.30.0 (per via di un mio errore nei repository fatto all'installazione, se cambio dovrei reinstallare tutto cosa che non ho tempo di fare)

Il codice ovviamente si può compilare passando per altre vie, tipo per g++. La cosa che vorrei capire è il perchè non compila più con gcc.
Lo standard C è quello non possono cambiare le funzioni o gli include, anche perchè controllando math.h non trovo una che sia una funzione matematica, che è successo?


Se avete idee, ringrazio :-)

Risposte
apatriarca
Hai inserito l'opzione di compilazione -lmath o -lm (non ricordo quale delle due vada usata o se vanno bene entrambe - è da un po' che non programmo in linux)?

hamming_burst
"apatriarca":
Hai inserito l'opzione di compilazione -lmath o -lm (non ricordo quale delle due vada usata o se vanno bene entrambe - è da un po' che non programmo in linux)?

bhe certo :-)
-lm io ho sempre visto...

apatriarca
bhe.. è strano.. hai provato a dare un occhiata al contenuto di math.h?

Rggb1
Potrebbe essere un problema dell'ottimizzatore, prova a aggiungere l'opzione di debug e controlla se il codice #2 poi funziona.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.