Pagina 1 di 4

[C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 11:41
da Max2433BO
Buongiorno a tutti,

rieccomi qua con una domanda sicuramente da principiante... :D

Ho realizzato questo semplicissimo programma per provare la funzione di elevamento a potenza presente nella libreria standard <math.h>:

Codice: Seleziona tutto
/* direttive da utilizzare */

#include <stdio.h> /* sempre necessaria per input - output */
#include <math.h>

/* Programma principale (main) */
/* prova funzione double pow (double x, double y) libreira math.h */
/* elevamento a potenza con x base e y esponente */

int main(void)
{
   /* Definizione tipo variabili locali main */
   
   double base, esponente, potenza;
   
   /* Dichiarazione variabili locali main */

   base = 2;
   potenza = 0;

   /* Istruzioni */
   
   for (esponente = 0; esponente <= 64; esponente = esponente + 1) {
      
      potenza = pow (base, esponente); /* Chiamata funzione libreria math.h */
      
      printf ("2 elevato a %f = %f \n", esponente, potenza);
      
   }
   
   return 0; /* Ultima istruzione programma principale */
   
}




Il programma in questione viene compilato senza errori

Codice: Seleziona tutto
gcc -Wall -c "Prova.c" (nel direttorio: /home/massimiliano/Prove_di_programmi)
Compilazione terminata correttamente.


ma, all'atto di generare l'eseguibile ottengo questi errori

Codice: Seleziona tutto
gcc -Wall -o "Prova" "Prova.c" (nel direttorio: /home/massimiliano/Prove_di_programmi)
/tmp/ccZ9doCY.o: nella funzione "main":
Prova.c:(.text+0x45): riferimento non definito a "pow"
collect2: error: ld returned 1 exit status
Compilazione fallita.


Se ho ben interpretato non riconosce la funzione "pow", ma come è possibile se ho appositamente incluso la libreria <math.h> prima dell'esecuzione del main del programma??

Grazie in anticipo per qualsiasi delucidazione mi fornirete.

O_/ Max

Nota 1: I parametri al comando gcc sono impostati direttamente dal programma Geany che utilizzo per la stesura e la prova di questi programmini.

Nota 2: Spero di non "urtare" nessuno proponendo un quesito per voi sicuramente banale.

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 11:45
da fairyvilje
Non è linkata durante la generazione dell'eseguibile.
Aggiungi -lm alla riga di codice per la compilazione che aggiunge la libraria libm

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 11:48
da simo85
Link utile in generale quando si lavora con librerie esterne: http://tldp.org/HOWTO/Program-Library-H ... aries.html

;-)

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 15:37
da Max2433BO
fairyvilje ha scritto: ... Aggiungi -lm alla riga di codice per la compilazione che aggiunge la libraria libm


Se aggiungo -lm ottengo

Codice: Seleziona tutto
gcc -Wall -o -lm "Prova" "Prova.c" (nel direttorio: /home/massimiliano/Prove_di_programmi)
Compilazione fallita.
gcc: error: Prova: File o directory non esistente


:-k ... non capisco, la directory esiste, tanto è vero che al suo interno si trovano sia un file Prova.c che un file Prova.o...

simo85 ha scritto:Link utile in generale quando si lavora con librerie esterne...


Scusa la mia immensa ignoranza, Foto Utentesimo85, ma la libreria <math.h> non fa parte della libreria standard di C come <stdio.h>?

Quindi perché per la seconda non ha nessun problema a trovarla ed a utilizzarne le sue funzioni (vedi printf...)?

O_/ Max

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 15:46
da simo85
Si, math.h è un header della libreria standard del C, ma non mi ricordo (nemmeno se l'ho letto da qualche parte) i motivi di queste implementazioni.

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 15:49
da DanteCpp
però dopo l'opzione -o dovresti specificare il nome che vuoi dare all'eseguibile! :mrgreen:

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 15:51
da Max2433BO
Quindi l'opzione -lm la devo scrivere prima...

... provo e faccio sapere.

O_/ Max

Edit

Nisba, stesso errore

Codice: Seleziona tutto
gcc -Wall -lm -o "Prova" "Prova.c" (nel direttorio: /home/massimiliano/Prove_di_programmi)
/tmp/ccB5Nvw0.o: nella funzione "main":
Prova.c:(.text+0x45): riferimento non definito a "pow"
collect2: error: ld returned 1 exit status
Compilazione fallita.

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 15:54
da DanteCpp
:ok: o dopo, l'importante è che non sia nel mezzo! :mrgreen:

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 16:03
da DanteCpp
?% strano, sarà mica opera aliena? :mrgreen:

Re: [C] Richiesta info per utilizzo libreria math.h

MessaggioInviato: 18 giu 2015, 16:05
da Max2433BO
Invece la posizione è importante Foto UtenteDanteCpp, il comando -lm lo devo inserire in fondo a tutto.

In questo modo riesce a generare l'eseguibile e a funzionare.

Codice: Seleziona tutto
gcc -Wall -o "Prova" "Prova.c" -lm (nel direttorio: /home/massimiliano/Prove_di_programmi)
Compilazione terminata correttamente.


Mi resta ancora da capire perché, essendo <math.h> parte della libreria standard di C sia necessario aggiungere questo comando a gcc.

O_/ Max