Pagina 1 di 1

[C] funzione pow() [Risolto]

Inviato: dom 11 set 2011, 19:45
da Vito

Codice: Seleziona tutto


#include <stdio.h>
#include <math.h>
#define DIM 2

int main(){
 
  int a=0;
  int i=0;
  int c[DIM];
  printf("inserisci numero da convertire:");
  scanf("%d",&a);
  printf("numero inserito: %d\n",a);
  for(i=0;i<DIM;i++){
    
    c[i]=a*pow(10,i-DIM+1);
    c[i]=c[i]%10;
    printf("%d\n",c[i]);
    c[i]=c[i]+48;
  }
  
  printf("%d,%d\n",c[1],c[0]);
  return 0; 
  
}


ricevo il seguente errore: "undefined reference to `pow' ".
Da cosa può dipendere!?

il prototipo della funzione è : double pow(double x, double y).
Ho provato a fare un casting a double,ma nulla.
È come se la funzione pow non accettasse come argomento una variabile.
Ho provato a scrivere il tutto in C++ e non ho avuto errori.

EDIT : Il problema è presente solo quando compilo con GCC(4.5.2 multilib), ho provato ad utilizzare un altro compilatore (MinGW) e non ho avuto nessun problema.

Re: [C] funzione pow()

Inviato: dom 11 set 2011, 19:53
da targzeta
Devi copilare linkandolo con qualche libreria matematica. Prova con:

Codice: Seleziona tutto

-lImath
Emanuele

Re: [C] funzione pow()

Inviato: dom 11 set 2011, 19:56
da 414N
spina ha scritto:Devi copilare linkandolo con qualche libreria matematica. Prova con:

Codice: Seleziona tutto

-lImath
Emanuele
Credo che il flag corretto da aggiungere a gcc sia -lm

Re: [C] funzione pow()

Inviato: dom 11 set 2011, 20:03
da targzeta
414N ha scritto:
spina ha scritto:Devi copilare linkandolo con qualche libreria matematica. Prova con:

Codice: Seleziona tutto

-lImath
Emanuele
Credo che il flag corretto da aggiungere a gcc sia -lm
Boh, dipende da cosa si intende per "corretto", con Imath funziona lo stesso. Comunque anche io stavo pensando (e suggerisco) '-lm' poi, non ricordando il nome preciso ho fatto un 'ls *math*' tra le libreria e ho trovato quella :lol:.

Emanuele

Re: [C] funzione pow()

Inviato: dom 11 set 2011, 20:12
da Vito
Grazie mille!
Adesso compila.

Re: [C] funzione pow()

Inviato: dom 11 set 2011, 20:18
da 414N
Vito ha scritto:Grazie mille!
Adesso compila.
In realtà non era la compilazione a fallire, ma il linking per creare l'eseguibile finale, volendo proprio essere pignoli ;)

Re: [C] funzione pow()

Inviato: dom 11 set 2011, 20:21
da Vito
414N ha scritto:
Vito ha scritto:Grazie mille!
Adesso compila.
In realtà non era la compilazione a fallire, ma il linking per creare l'eseguibile finale, volendo proprio essere pignoli ;)
:thumbright:

Re: [C] funzione pow() [Risolto]

Inviato: dom 11 set 2011, 20:37
da Vito
Ho un'ulteriore domanda:

Codice: Seleziona tutto

[vito@Freedom:int2string]$ gcc -lm -o int2string int2string.c
in questo caso non mi ritrovo nessun fil oggetto.

Mentre invece se utilizzo un ambiente (dove per ogni progetto mi crea un makefile) "giustamente" mi ritrovo il file oggetto:

Codice: Seleziona tutto

make all 
Building file: ../int2string.c
Invoking: GCC C Compiler
gcc  -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"int2string.d" -MT"int2string.d" -o "int2string.o" "../int2string.c"
Finished building: ../int2string.c
 
Building target: int2string
Invoking: GCC C Linker
gcc -lm -o "int2string"  ./int2string.o   
Finished building target: int2string

Nel primo caso la creazione del file oggetto avviene "implicitamente",mentre nel secondo caso separo "esplicitamente" la fase di compilazione dalla fase di linking,ecco perchè l'opzione "-lm" la passo quando invoco il linker,giusto?

Re: [C] funzione pow() [Risolto]

Inviato: dom 11 set 2011, 20:40
da targzeta
Guarda i parametri passati dall'ambiente di creazione al gcc. Il parametro '-c' in particolare.

Emanuele

:edit: nota che il makefile fa due passaggi. Prima crea il file oggetto con '-c' e poi esegue il linking. Guarda il man di gcc.

Re: [C] funzione pow() [Risolto]

Inviato: dom 11 set 2011, 20:43
da Vito
spina ha scritto:Guarda i parametri passati dall'ambiente di creazione al gcc. Il parametro '-c' in particolare.

Emanuele
-c : compila senza linkare :thumbright:
Grazie mille,non ricordavo proprio questa cosa!