PDA

View Full Version : [c] sviluppare con c in ubuntu


Dhavamba
22-08-2012, 09:21
salve da poco ho scaricato ubuntu è programmando con c mi è venuto questo problema...il codice è semplicissimo, sfortunatamente mi fà un errore che in ambiente windows non mi dava:

ecco il codice:


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

int main()
{
double amount = 4;
double principal = 1000.0;
double rate = 0.5;
int year;

printf("%4s%21s\n", "Year", "Amount on deposit");

for( year = 1; year <= 10; year++) {
amount = principal * pow(1.0 + rate, year);
printf ("%4d%21.2f\n", year, amount);
}
return 0;

}

ed ecco il messaggio di errore

gcc -Wall -o "rate" "rate.c" (nella cartella: /home/salvatore/classi)
/tmp/ccIlGxfp.o: In function `main':
rate.c:(.text+0x64): undefined reference to `pow'
collect2: ld returned 1 exit status
Compilazione fallita.

il problema stà nella funzione pow del paccheto math.h, però non capisco, l'ho inclusa, perchè?

sottovento
22-08-2012, 09:28
prova ad aggiungere -lm come flag di compilazione a gcc

Dhavamba
22-08-2012, 09:43
nada, mi fà lo stesso errore ;_;

GByTe87
22-08-2012, 10:13
Provato ora su Ubuntu pulita:

gibbo@ubuntu64:~$ gcc test.c
/tmp/ccl1PiQf.o: In function `main':
test.c:(.text+0x6e): undefined reference to `pow'
collect2: ld returned 1 exit status
gibbo@ubuntu64:~$ gcc test.c -lm
gibbo@ubuntu64:~$ ./a.out
Year Amount on deposit
1 1500.00
2 2250.00
3 3375.00
4 5062.50
5 7593.75
6 11390.62
7 17085.94
8 25628.91
9 38443.36
10 57665.04
gibbo@ubuntu64:~$

Dhavamba
22-08-2012, 10:15
quindi qual'è il mio problema?

GByTe87
22-08-2012, 10:20
Hai compilato come ho fatto io o in modo diverso? libm.so è presente sul tuo sistema (usa un locate per trovarla)?

sottovento
22-08-2012, 12:27
hai installato il compilatore correttamente?
hai le variabili d'ambiente corrette?
hai provato a cercare libm.a per vedere se e' installata correttamente?
Se con un find (per es. find <start directory> -name libm.a -print) la trovi, potresti provare ad aggiungere
-L <directory> -lm

Questo magari ti e' di aiuto:
http://stackoverflow.com/questions/7284009/cannot-find-lc-and-lm-in-g-linux

giozh
23-08-2012, 15:35
salve da poco ho scaricato ubuntu è programmando con c mi è venuto questo problema...il codice è semplicissimo, sfortunatamente mi fà un errore che in ambiente windows non mi dava:

ecco il codice:


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

int main()
{
double amount = 4;
double principal = 1000.0;
double rate = 0.5;
int year;

printf("%4s%21s\n", "Year", "Amount on deposit");

for( year = 1; year <= 10; year++) {
amount = principal * pow(1.0 + rate, year);
printf ("%4d%21.2f\n", year, amount);
}
return 0;

}

ed ecco il messaggio di errore

gcc -Wall -o "rate" "rate.c" (nella cartella: /home/salvatore/classi)
/tmp/ccIlGxfp.o: In function `main':
rate.c:(.text+0x64): undefined reference to `pow'
collect2: ld returned 1 exit status
Compilazione fallita.

il problema stà nella funzione pow del paccheto math.h, però non capisco, l'ho inclusa, perchè?

la libreria math.h la devi linkare a mano durante la compilazione, inserendo (dopo i vari gcc -o etc etc)
-lm math.h

pabloski
23-08-2012, 15:40
Il tuo è solo un problema di compilazione. Usa questo comando


gcc -o rate rate.c -lm


Il punto è che -lm va messo alla fine del comando, altrimenti non funge.

Dhavamba
27-08-2012, 11:03
grazie, ho aggiunto -lm alla fine, ho risolto tutto!!!