PDA

View Full Version : [C] Makefile strambo.


Unrue
21-06-2008, 13:50
Allora,
ho un problema bizzarro:doh: Dunque, sto compilando un codice che mi hanno dato che contiene un makefile. La prima volta, mi dava degli errori in un include che non trovava un tipo. L'ho corretto, e la compilazione è andata avanti. A questo punto, ho trovato via via altri errori puntualmente corretti.

Il problema si è presentato oggi: nonostante abbia fatto un make distclean, eliminato la cartella originale e riscompattato, ho sostituito i sorgenti corretti e continua a darmi gli errori di ieri!. Vado a controllare i sorgenti, e ci sono le correzioni che avevo apportato e che ieri funzionavano!

Sembra che continui a vederei vecchi sorgenti, che però non esistono più!:confused:

Che succede?

DanieleC88
21-06-2008, 14:11
Sembra che continui a vederei vecchi sorgenti, che però non esistono più!:confused:
Risveglia i morti dall'oltretomba? :wtf:

:D
No, è tecnicamente impossibile che faccia una cosa del genere, l'errore dev'essere un altro... È possibile vedere il Makefile e gli errori che ti dà?

ciao ;)

Unrue
21-06-2008, 14:14
Risveglia i morti dall'oltretomba? :wtf:

:D
No, è tecnicamente impossibile che faccia una cosa del genere, l'errore dev'essere un altro... È possibile vedere il Makefile e gli errori che ti dà?

ciao ;)

Il makefile è immenso, meglio non postarlo :)

Gli errori sono che non trova un tipo:

/header/node.h:32: error: ‘Element’ has not been declared

Infatti non c'era l'header in cui è definito. Gli e l'ho messo, all'inizio andava bene ed adessonon più :confused:

poi c'era un errore in un cast, corretto. Anche questo prima andava, ora non più.

DanieleC88
21-06-2008, 14:17
Il makefile è immenso, meglio non postarlo :)
Un link su NoPaste?

wingman87
21-06-2008, 14:19
Stai usando un ide o stai compilando a manina? Se usi un IDE e hai creato un progetto prova a ricrearlo da zero aggiungendoci tutti i file e poi prova a ricompilarlo

Unrue
21-06-2008, 14:21
Un link su NoPaste?

Cioè? Il make file penso sia corretto, è generato con il configure.

Unrue
21-06-2008, 14:21
Stai usando un ide o stai compilando a manina? Se usi un IDE e hai creato un progetto prova a ricrearlo da zero aggiungendoci tutti i file e poi prova a ricompilarlo

No no, sto facendo a mano.

DanieleC88
21-06-2008, 14:52
http://www.rafb.net/paste/

Comunque non è detto che se è generato dalle autotools sia corretto, magari è un errore di percorsi o roba simile, perciò ero curioso di sapere. Che programma è?

Unrue
21-06-2008, 22:23
http://www.rafb.net/paste/

Comunque non è detto che se è generato dalle autotools sia corretto, magari è un errore di percorsi o roba simile, perciò ero curioso di sapere. Che programma è?

E' un programma di una università americana, Hephaestus. Comunque potrebbe darsi che la prima volta che ha corretto gli errori, in realtà non abbia corretto nulla e mi ero sbagliato io.. Contatterò l'autore e sento cosa mi dice.

DanieleC88
21-06-2008, 22:33
Mai sentito... :)
Va bene, se la cosa non dovesse risolversi, aggiornaci sull'andamente che proveremo a darti una mano. ;)

Unrue
22-06-2008, 13:38
Ad esempio,
in un file header c'è questa definizione:

friend class Element;

Nell'header originale non vi è incluso l'header dove è definita questa classe, quindi giustamente non trova quel tipo. Faccio make clean, make distclean, rimuovo la cartella, la ricreo, aggiungo la correzione, rifaccio il configure e continua a dirmi:

../header/node.h:32: error: ‘Element’ has not been declared

Tale errore avrebbe senso senza la nuova inclusione che gli ho dato! Ma per caso, l'ordine con il quale si fa gli include, è importante?

DanieleC88
22-06-2008, 14:04
Ad esempio,
in un file header c'è questa definizione:

friend class Element;

Nell'header originale non vi è incluso l'header dove è definita questa classe, quindi giustamente non trova quel tipo.
Non è detto, può essere una forward declaration per evitare interdipendenze tra gli header, è perfettamente lecito. ;)
Ma per caso, l'ordine con il quale si fa gli include, è importante?
Se hai un header che richiede strettamente cose dichiarate in un altro header, ovviamente sì, dovrai includere prima l'altro e poi quello che ne usa le dichiarazioni. :)

Unrue
22-06-2008, 15:10
Non è detto, può essere una forward declaration per evitare interdipendenze tra gli header, è perfettamente lecito. ;)


Si però non trova il tipo:confused:

DanieleC88
22-06-2008, 15:14
Mi fai vedere l'header o almeno cosa c'è alla riga 32? Probabilmente in quel punto viene usato qualche membro interno ad Element, se invece hai bisogno semplicemente di "sapere che esiste" basta una forward declaration.

ciao ;)

Unrue
22-06-2008, 15:21
Mi fai vedere l'header o almeno cosa c'è alla riga 32? Probabilmente in quel punto viene usato qualche membro interno ad Element, se invece hai bisogno semplicemente di "sapere che esiste" basta una forward declaration.

ciao ;)

class Node {

friend class Element;

friend void Pack_element(Element* sendel, ElemPack** elemptr,
HashTable* HT_Node_Ptr, int); // riga 32

Questo è una parte dell'header. La forward declaration già c'è. Non è che va messa fuori dalla classe?

DanieleC88
22-06-2008, 15:40
No, no, la posizione è giusta, deve essere friend di quella classe e quindi deve essere interno alla stessa... Strano, prova a mettere un class Element; (una riga, così com'è) prima della dichiarazione di class Node.

Unrue
22-06-2008, 15:52
No, no, la posizione è giusta, deve essere friend di quella classe e quindi deve essere interno alla stessa... Strano, prova a mettere un class Element; (una riga, così com'è) prima della dichiarazione di class Node.


Mm, pare che funzioni, nel senso che è andato avanti ma ha dato altri errori. Come si spiega questa cosa della classe friend quindi?

Comunque questo programma è pieno di problemi, devo fare una ramanzina all'autore :) Grazie per adesso

DanieleC88
22-06-2008, 16:09
Allora ricordavo male, se c'è solo un "friend" la classe ha bisogno di essere già dichiarata esplicitamente: quindi quello che ti ho fatto fare è stato inserire una forward declaration (class Element) per evitare di dare l'errore. Però non è una soluzione ottimale, magari includendo prima il relativo header forse risolvevi. :wtf: