PDA

View Full Version : [C] Non mi include i miei header files!


VegetaSSJ5
24-10-2003, 14:44
Salve a tutti, ho un problema in c. Ho creato un file header per la gestione delle liste dove ho scritto tutti i prototipi che ho chiamato list.h e invece nel file list.c ho scritto le funzioni vere e proprie. Nel codice del programma che andrà ad utilizzare questi header file ho specificato di includerli scrivendo

#include "list.h"

ma ogni volta che provo a compiilare mi dà il linker error perchè è come se non includesse quei files! Ho messo quei files sia nella cartella dove salvo tutti i programmi da compilare sia nella cartella 'include' della directory di installazione dei compilatori (uso sia dev c++ che lcc). Non so che fare, aiutatemi!

cionci
24-10-2003, 18:00
Che errori ti da di preciso ?

VegetaSSJ5
24-10-2003, 18:05
Originariamente inviato da cionci
Che errori ti da di preciso ?
in pratica non riesce a linkare i files che io includo: mi dice che il linker non riesce a risolvere il collegamento ad una funzione che io ho chiamato "undefined reference to '_length' "(proprio perchè non include i files!).:cry:

cionci
24-10-2003, 18:06
Riportami pari pari l'errore e la riga sulla quale ti da l'errore...
Dove hai definito "_length" ?

VegetaSSJ5
24-10-2003, 18:46
Originariamente inviato da cionci
Riportami pari pari l'errore e la riga sulla quale ti da l'errore...
Dove hai definito "_length" ?
eccoti il codice:#include <stdio.h>
#include "list.h"

void main () {
}

void inverti (link testa) {
int lung=length(testa);
link a[lung];
link temp=testa;
int i=0;
for (i=0; i<lung; i++) {
a[lung-i]=temp;
temp=temp->next;
}
for (i=0; i<lung; i++) {
testa=a[lung-i];
testa=testa->next;
}
}ecco l'errore che mi dà con LCC: "es15.obj .text undefined reference to '_length' lunker returned 1"
ti allego anche i files list.c e list.h

DanieleC88
24-10-2003, 21:31
Hmm... molto strano, col mio Dev-C++ 4.9.3.8 compila bene.
Credo sia un problema di opzioni del compilatore, guarda bene.

VegetaSSJ5
24-10-2003, 21:43
Originariamente inviato da DanieleC88
Hmm... molto strano, col mio Dev-C++ 4.9.3.8 compila bene.
Credo sia un problema di opzioni del compilatore, guarda bene.
io ho dev-c++ 4983. tu dove hai estratto i files list.h e list.c?

VegetaSSJ5
24-10-2003, 23:07
AGGIORNAMENTO:
ho scoperto che se invece di mettere

#include "list.h"

metto

#include "list.c"

il programma viene compilato correttamente!!! Ma come mai?? Non bisogna includere il file con estensione .h cioè quello contenente i prototipi delle funzioni???

cionci
25-10-2003, 02:36
Devi compilare anche list.c... Fai un progetto con Dev-C++ ed includi nel progetto il file dove c'è il main ed il file list.c...ed il gioco è fatto...

Gibbus
25-10-2003, 07:09
Infatti. Secondo me andava tutto bene...il fatto che sostituendo "list.h" con "list.c" compilasse mi fa pensare che non fosse stato creato un progetto.

cionci
25-10-2003, 07:23
Infatti gli da un errore di linker...e non di compilazione... Quindi il .h lo include...

VegetaSSJ5
25-10-2003, 09:33
siccome non l'ho mai fatto, quando seleziono nuovo progetto cosa devo scegliere ( ci sono tante cose, windows application, dll ecc.)?

cionci
25-10-2003, 14:13
Console Application...

VegetaSSJ5
25-10-2003, 21:56
Originariamente inviato da cionci
Console Application...
infatti ora funziona correttamente includendo il file list.h.
ma per chi non ha in IDE (io uso compilare da riga di comando con lcc) come risolve il problema?

cionci
26-10-2003, 02:48
Non so l'interfaccia di lcc, ma con il gcc ci sono diverse possibilità:

gcc main.c list.c -o mio.exe

oppure

gcc list.c -c list.o
gcc main.c list.o -o mio.exe

VegetaSSJ5
26-10-2003, 08:05
Originariamente inviato da cionci
Non so l'interfaccia di lcc, ma con il gcc ci sono diverse possibilità:

gcc main.c list.c -o mio.exe

oppure

gcc list.c -c list.o
gcc main.c list.o -o mio.exe
in questo caso però nel main dovrò includere il list.c anzichè il list.h?

cionci
26-10-2003, 15:56
No...list.h... Si incldono sempre e solo gli header...
list.c viene compilato da solo e linkato all'eseguibile...