PDA

View Full Version : [C] Mi sa che non ho capito come scrivere le librerie


Tanner
27-09-2005, 18:26
Premetto che non sono niubbo in programmazione.
E' che ho un problema con il C, che non è il mio linguaggio preferenziale.

Devo scrivere una libreria. Da quanto ho capito, è composta da un file .h e da un .c, uno è l'header, l'altro è l'implementazione.

Ora, mi sapete dire perchè includendo l'header nel mio programma, e invocando una ipotetica funzione "chiamami", ottengo questo risultato dal linker?

[Linker error] undefined reference to `chiamami'

Contenuto del file libre.h
extern int chiamami(int);

Contenuto del file libre.c

int chiamami(int a)
{
return a;
}



E infine il main del programma:

#include "libre.h"

int main (void)
{
int prova;
prova = chiamami(5);
return 0;
}

Ovviamente è un file di esempio, devo capire come fare la libreria per un algoritmo molto più complesso.
Grazie a tutti per l'attenzione.

Tanner
27-09-2005, 19:22
Nessuno che sappia dirmi come si scrive una libreria in C???
Aiutoo.. il tempo passa e ho sempre meno possibilità di riuscire a fare sta relazione...

Arpeda
27-09-2005, 19:54
quell'errore te lo da il linker non il compilatore, questo perchè in fase di creazione dell'eseguibile ti scordi di aggiungere la libreria o perchè hai fatto qualche altro errore, per esempio quell'extern non ci va quindi

extern int chiamami(int);
diventa
int chiamami(int);

ti faccio un esempio con gcc, il compilatore di linux
compili la libreria con
gcc -c libreria.c
lui ti crea un file object ( libreria.o )
poi compili il main
gcc main.c -o main libreria.o
in questo modo compili il main ed in fase di linking usi anche libreria.o (dove c'è la funzione chiamami).

Puoi trasportare questi concetti con qualsiasi altro compilatore che non sia gcc (apparte i differenti parametri)

ciao

Tanner
27-09-2005, 19:57
Risolto.

E' colpa del fatto che sono sotto Windows :) e uso DevCPP.

Stavo lavorando sui singoli file mentre DevCPP vuole che prima crei un file di Progetto, nel mio caso l'ha chiamato Progetto1.

Credo che tale procedura semplificata sia alla fin fine un'automazione della compilazione manuale che mi hai spiegato. Thx, cazz ci ho badato 3 ore per capire.. ora sono nella cacca, devo finire la relazione entro 2 ore!!!

71104
27-09-2005, 22:05
guarda che non è colpa di Windows, è "colpa" del fatto che il gcc vuole nella cmdline l'elenco completo dei files .c che hai scritto, anche sotto Linux (come qualsiasi altro compilatore d'altronde). al massimo si può dire che è colpa del Dev-C++ che è un pessimo IDE :)

anx721
28-09-2005, 00:25
l'extern non c'entra