PDA

View Full Version : [UBUNTU] problemi con gcc


ramarromarrone
15-02-2008, 13:55
ciao a tutti
ho un problema con gcc sotto ubuntu.
questo č il file prova.c

#include <math.h>
#include <stdio.h>
#include <time.h>


int trigonometria(long m)
{
int i = 0;
time_t adesso = time(NULL);
while(difftime(time(NULL), adesso) < m) {
double a;
double x = 65465.1433532;
double y = 4.656;
a = acos(x);
a = asin(x);
a = tan(x);
a = atan2(y,x);
a = cos(x);
a = cosh(x);
a = sin(x);
a = sinh(x);
a = tan(x);
a = tanh(x);
a = exp(x);
a = log(x);
a = log10(x);
a = pow(x,y);
a = sqrt(x);
a = ceil(x);
a = fabs(x);
a = floor(x);
a = fmod(x,y);
i++;
}
return i;

}

int main() {
int r = trigonometria(5);
printf("%i\n",r);
return 0;
}



quando faccio gcc -o prova prova.c
mi dice:


/tmp/ccY4sjeE.o: In function `trigonometria':
benc.c:(.text+0x311): undefined reference to `acos'
benc.c:(.text+0x31f): undefined reference to `asin'
benc.c:(.text+0x32d): undefined reference to `tan'
benc.c:(.text+0x342): undefined reference to `atan2'
benc.c:(.text+0x350): undefined reference to `cos'
benc.c:(.text+0x35e): undefined reference to `cosh'
benc.c:(.text+0x36c): undefined reference to `sin'
benc.c:(.text+0x37a): undefined reference to `sinh'
benc.c:(.text+0x388): undefined reference to `tan'
benc.c:(.text+0x396): undefined reference to `tanh'
benc.c:(.text+0x3a4): undefined reference to `exp'
benc.c:(.text+0x3b2): undefined reference to `log'
benc.c:(.text+0x3c0): undefined reference to `log10'
benc.c:(.text+0x3d5): undefined reference to `pow'
benc.c:(.text+0x3f7): undefined reference to `sqrt'
benc.c:(.text+0x40b): undefined reference to `ceil'
benc.c:(.text+0x421): undefined reference to `floor'
benc.c:(.text+0x436): undefined reference to `fmod'
collect2: ld returned 1 exit status


gcc in windows non mi dava questo problema..
perchč?

Gimli[2BV!2B]
16-02-2008, 00:16
Devi specificare a gcc di linkare la libreria math (l'equivalente linux delle famigerate dll): basta aggiungere -lm al comando.
gcc -lm -o trig trig.c
Con l'opzione -o nome_compilato gli spieghi anche come chiamare il file prodotto dalla compilazione (invece di doverlo poi andare a prendere in /tmp/ccY4sjeE.o come nel tuo tentativo). Risultato:
gimli@altarf:~/Desktop$ gcc -o trig -lm trig.c
gimli@altarf:~/Desktop$ ./trig
1817030

Se ti trovi di fronte ad errori del genere significa che devi specificare di linkare una qualche libreria aggiungendo qualche altro -lQUALCOSA (specificando eventualmente la cartella in cui cercarle con -L/CARTELLA/CHE/CONTIENE/LE/LIBRERIE); purtroppo io non conosco tabelle che riportino queste opzioni.
Occorre controllare nei man degli include utilizzati o cercare in internet, oppure sperare che qualcun altro sia pių informato.
Resta che man math non da nulla, mentre, ad esempio, man stdio o man string ci sono (se non ti funzionano controlla in Synaptic o Adept di avere installato manpages-dev).