Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[C] Richiesta info per utilizzo libreria math.h

Linguaggi e sistemi

Moderatori: Foto UtentePaolino, Foto Utentefairyvilje

1
voti

[1] [C] Richiesta info per utilizzo libreria math.h

Messaggioda Foto UtenteMax2433BO » 18 giu 2015, 11:41

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.
Disapprovo quello che dite, ma difenderò fino alla morte il vostro diritto di dirlo [attribuita a Voltaire]

La gentilezza dovrebbe diventare lo stile naturale della vita, non l'eccezione [Siddhārtha Gautama]
Avatar utente
Foto UtenteMax2433BO
18,6k 4 11 13
G.Master EY
G.Master EY
 
Messaggi: 4724
Iscritto il: 25 set 2013, 16:29
Località: Universo - Via Lattea - Sistema Solare - Terzo pianeta...

3
voti

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

Messaggioda Foto Utentefairyvilje » 18 giu 2015, 11:45

Non è linkata durante la generazione dell'eseguibile.
Aggiungi -lm alla riga di codice per la compilazione che aggiunge la libraria libm
"640K ought to be enough for anybody" Bill Gates (?) 1981
Qualcosa non ha funzionato...

Lo sapete che l'arroganza in informatica si misura in nanodijkstra? :D
Avatar utente
Foto Utentefairyvilje
15,0k 4 9 12
G.Master EY
G.Master EY
 
Messaggi: 3047
Iscritto il: 24 gen 2012, 19:23

3
voti

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

Messaggioda Foto Utentesimo85 » 18 giu 2015, 11:48

Link utile in generale quando si lavora con librerie esterne: http://tldp.org/HOWTO/Program-Library-H ... aries.html

;-)
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

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

Messaggioda Foto UtenteMax2433BO » 18 giu 2015, 15:37

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
Disapprovo quello che dite, ma difenderò fino alla morte il vostro diritto di dirlo [attribuita a Voltaire]

La gentilezza dovrebbe diventare lo stile naturale della vita, non l'eccezione [Siddhārtha Gautama]
Avatar utente
Foto UtenteMax2433BO
18,6k 4 11 13
G.Master EY
G.Master EY
 
Messaggi: 4724
Iscritto il: 25 set 2013, 16:29
Località: Universo - Via Lattea - Sistema Solare - Terzo pianeta...

0
voti

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

Messaggioda Foto Utentesimo85 » 18 giu 2015, 15:46

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.
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

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

Messaggioda Foto UtenteDanteCpp » 18 giu 2015, 15:49

però dopo l'opzione -o dovresti specificare il nome che vuoi dare all'eseguibile! :mrgreen:
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

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

Messaggioda Foto UtenteMax2433BO » 18 giu 2015, 15:51

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.
Disapprovo quello che dite, ma difenderò fino alla morte il vostro diritto di dirlo [attribuita a Voltaire]

La gentilezza dovrebbe diventare lo stile naturale della vita, non l'eccezione [Siddhārtha Gautama]
Avatar utente
Foto UtenteMax2433BO
18,6k 4 11 13
G.Master EY
G.Master EY
 
Messaggi: 4724
Iscritto il: 25 set 2013, 16:29
Località: Universo - Via Lattea - Sistema Solare - Terzo pianeta...

0
voti

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

Messaggioda Foto UtenteDanteCpp » 18 giu 2015, 15:54

:ok: o dopo, l'importante è che non sia nel mezzo! :mrgreen:
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

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

Messaggioda Foto UtenteDanteCpp » 18 giu 2015, 16:03

?% strano, sarà mica opera aliena? :mrgreen:
Avatar utente
Foto UtenteDanteCpp
4.730 3 9 13
Master EY
Master EY
 
Messaggi: 1106
Iscritto il: 15 dic 2011, 18:51

0
voti

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

Messaggioda Foto UtenteMax2433BO » 18 giu 2015, 16:05

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
Disapprovo quello che dite, ma difenderò fino alla morte il vostro diritto di dirlo [attribuita a Voltaire]

La gentilezza dovrebbe diventare lo stile naturale della vita, non l'eccezione [Siddhārtha Gautama]
Avatar utente
Foto UtenteMax2433BO
18,6k 4 11 13
G.Master EY
G.Master EY
 
Messaggi: 4724
Iscritto il: 25 set 2013, 16:29
Località: Universo - Via Lattea - Sistema Solare - Terzo pianeta...

Prossimo

Torna a PC e informatica

Chi c’è in linea

Visitano il forum: Nessuno e 8 ospiti