Debianizzati.Org | Forum | Blog | Guide | IRC
 
 
Forum Italiano Debian - Debianizzati.Org
Ottobre 13, 2008, 03:43:37 *
Benvenuto, Visitatore. Per favore, effettua il login o registrati.
Hai perso la tua email di attivazione?

Login con username, password e lunghezza della sessione
News:
 
   Home   Help Ricerca Calendario Login Registrati  
Pagine: [1]   Vai Giù
  Stampa  
Autore Topic: [C] Riferimento indefinito alla funzione pow()  (Letto 574 volte)
0 Utenti e 1 Visitatore stanno guardando questo topic.
daniele.87
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 16


Guarda Profilo
« il: Aprile 19, 2008, 02:50:43 »

Ciao a tutti,
sto utilizzando un makefile per compilare tutta una serie di moduli che serviranno a creare un piccolo progetto C, ma ho un problema:

nel file modulo1.c (uno dei tanti file che compongono il progetto) ho usato la funzione pow(), e quindi  ho incluso la libreria math.h nel file .c, ma questa libreria però in fase di compilazione non viene trovata.
Mi vengono restituiti i seguenti errori:

Codice:
modulo1.c:(.text+0x4c3): undefined reference to `pow'
collect2: ld returned 1 exit status

Sono venuto a sapere che per usare le funzioni matematica a volte bisogna aggiungere l'opzione -lm, però dove vado a scrivere questa opzione??

La prima cosa che ho pensato è di includerla nel makefile, ma in che punto?
Ho provato in un po' di modi ma il problema si ripresenta.

Vi posto il contenuto del file makefile:
Codice:
objects = main.o modulo1.o solver.o clausole.o vettori.o
modulo1: $(objects)
cc -o modulo1 $(objects)
main.o: solver.o modulo1.o clausole.o vettori.o main.c \
letterali.h vettori.h clausole.h solver.h
cc -c main.c
modulo1.o: solver.o vettori.o clausole.o  modulo1.c letterali.h \
vettori.h clausole.h solver.h modulo1.h
cc -c modulo1.c
solver.o: vettori.o clausole.o solver.c
cc -c solver.c
clausole.o: vettori.o clausole.c vettori.h letterali.h clausole.h
cc -c clausole.c
vettori.o: vettori.c vettori.h
cc -c vettori.c

.PHONY: clean
clean:
rm $(objects) modulo1


Cosa posso fare??
Dove includere questa opzione o cos'altro fare?

Grazie
« Ultima modifica: Aprile 19, 2008, 02:52:22 da daniele.87 » Loggato
jethro
Jr. Member
**

Karma: +1/-0
Offline Offline

Posts: 50



Guarda Profilo
« Risposta #1 il: Aprile 19, 2008, 03:41:37 »

l'opzione -lm va usata nel seguente modo:

Codice:
cc -o eseguibile sorgente1.c sorgente2.c eccetera -lm

quindi puoi crearti una variabile option nel makefile

Codice:
option=-lm

e richiamarla dove ti serve  Wink

un makefile semplice
Codice:
SRC=sorgente1.c sorgente2.c eccetera
EXE=eseguibile
OPT=-lm

all:
        cc -o $(EXE) $(SRC) $(OPT)
Loggato
daniele.87
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 16


Guarda Profilo
« Risposta #2 il: Aprile 19, 2008, 04:24:54 »

Ottimo grazie.
Loggato
daniele.87
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 16


Guarda Profilo
« Risposta #3 il: Aprile 19, 2008, 04:39:36 »

Scusami, ma questa è la prima volta che uso un makefile (e questo non è neanche il massimo della semplicità per il mio attuale livello) e non capisco bene cosa fare.

Provando a seguire le tue indicazioni ho modificato il file come segue:
Codice:
objects = main.o modulo1.o solver.o clausole.o vettori.o
modulo1: $(objects)
cc -o modulo1 [b]-lm[/b] $(objects)
main.o: solver.o modulo1.o clausole.o vettori.o main.c \
letterali.h vettori.h clausole.h solver.h
cc -c main.c
modulo1.o: solver.o vettori.o clausole.o  modulo1.c letterali.h \
vettori.h clausole.h solver.h modulo1.h
cc -c modulo1.c
solver.o: vettori.o clausole.o solver.c
cc -c solver.c
clausole.o: vettori.o clausole.c vettori.h letterali.h clausole.h
cc -c clausole.c
vettori.o: vettori.c vettori.h
cc -c vettori.c

.PHONY: clean
clean:
rm $(objects) modulo1

E' corretto??
Io dovrei alla fin fine solo usare quell'opzione la quando si va a compilare il file modulo1.c perché solo in quel file uso la libreria math.
Loggato
Finn
Global Moderator
Hero Member
*****

Karma: +27/-1
Online Online

Posts: 1082


207002659
Guarda Profilo
« Risposta #4 il: Aprile 19, 2008, 06:38:13 »

Non quando viene compilato un "blocco" che usa math.h ma quando viene linkato, comunque ad occhio è corretto.
Proprio per farrre i pignoli, puoi semplificarti parecchio la vita evitando di mettere i vari cc -c <X>.c, make è sufficientemente intelligente da farlo per te.
Se hai tempo, una lettura veloce allo "Short contens" di GNU `make'  può aiutare in tal senso.

My 0.02€

PS
Giusto per curiosità, cosa stai facendo? I nomi di file mi ricordano brutte cose Tongue
Loggato
daniele.87
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 16


Guarda Profilo
« Risposta #5 il: Aprile 19, 2008, 07:18:36 »

Purtroppo all'esecuzione del programma mi viene dato sempre "segmentation fault".
Provando ad eliminare le righe di codice incriminate tutto va a buon fine...

Evidentemente c'è ancora qualcosa che non va...

Per rispondere alla tua domanda sto progettando per l'uni un programma che riconosce se una formula è soddisfacibile o meno.

Loggato
Finn
Global Moderator
Hero Member
*****

Karma: +27/-1
Online Online

Posts: 1082


207002659
Guarda Profilo
« Risposta #6 il: Aprile 19, 2008, 08:54:29 »

Allora ho riconosciuto davvero qualcosa di brutto (almeno in linea di principio... SAT non mi sembra un problemino da niente...).

Se da segmentation fault è un problema di codice, non di Makefile.

Se vuoi ci si da un occhio, in privato se preferisci.

My 0.02€
Loggato
daniele.87
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 16


Guarda Profilo
« Risposta #7 il: Aprile 20, 2008, 08:07:42 »

Ok, grazie.
Loggato
daniele.87
Newbie
*

Karma: +0/-0
Offline Offline

Posts: 16


Guarda Profilo
« Risposta #8 il: Aprile 20, 2008, 02:09:03 »

La cosa assurda è che ho provato a sostituire la funzione pow con una mia funzione ricorsiva che fa la stessa cosa, e...no ho risulto nulla...

da esattamente lo stesso errore di prima...assurdo...
Loggato
jethro
Jr. Member
**

Karma: +1/-0
Offline Offline

Posts: 50



Guarda Profilo
« Risposta #9 il: Aprile 20, 2008, 03:51:48 »

da esterno mi viene da chiederti

"hai controllato i puntatori che usi e che non puntino a zone di memoria non allocata?"

oppure

hai provato a usare un debugger (gdb) oppure le comunissime printf per localizzare facilmente l'errore?

scusa se ti sembrano cose banali e se hai già controllato tutto, ma volte basta un niente è sei fregato    Smiley
Loggato
Pagine: [1]   Vai Su
  Stampa  
 
Salta a:  

Altri Topic Correlati
Oggetto Iniziato da Risposte Visto Ultimo Post
Streamtuner, funzione: record Multimedia kappe 0 186 Ultimo Post Febbraio 02, 2006, 09:27:40
da kappe
raiclick e funzione seek Multimedia fraborgh 4 570 Ultimo Post Gennaio 30, 2007, 12:38:16
da fraborgh
Tasti Funzione Asus F3tc - ap001c Laptop Arun 2 343 Ultimo Post Maggio 23, 2007, 06:40:25
da revjones
Tasti Funzione Sony-Vaio! Hardware spaghetto 3 781 Ultimo Post Ottobre 11, 2007, 10:17:17
da Il Tera
[C] Una domanda su una funzione ricorsiva Programmazione daniele.87 1 284 Ultimo Post Aprile 23, 2008, 05:29:40
da Finn
Powered by MySQL Powered by PHP Powered by SMF 1.1.6 | SMF © 2006-2007, Simple Machines LLC
Seo4Smf v0.2 © Webmaster's Talks
Traduzione Italiana a cura di SMItalia
XHTML 1.0 Valido! CSS Valido!
Pagina creata in 0.289 secondi con 21 queries.