[C] gcc - multiple definition of...

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
nico88desmo
Prode Principiante
Messaggi: 42
Iscrizione: martedì 5 settembre 2006, 16:59

[C] gcc - multiple definition of...

Messaggio da nico88desmo »

Buongiorno!

Durante la compilazione di un programmino in C, il compilatore gcc mi dà in output questo errorino:
Codice:

Codice: Seleziona tutto

gcc -o main_mate main_mate.c lib.a 
lib.a(lib_mate.o):(.data+0x0): multiple definition of `LIB_SIMBOLI'
/tmp/ccwhL9qR.o:(.data+0x0): first defined here
collect2: ld returned 1 exit status
I file sono 3:
- main_mate.c = programmino dove viene lanciato il programma;
- lib_mate.h = libreria che contiene strutture e dichirazione funzioni;
- lib_mate.c = sorgente dove viene scritto il corpo delle funzioni della libreria:

Per la compilazione faccio questi passaggi:
1) gcc -c -o lib_mate.o lib_mate.c
2) ar r lib.a lib_mate.o
3) gcc -c -o main_mate main_mate.c
4) gcc -o main_mate main_mate.c lib.a

L'errore significa che ci sono più definizioni di `LIB_SIMBOLI` ma quest'ultimo è stato definito solamente nel sorgente "lib_mate.h".
Cosa potrebbe essere allora???
synack
Prode Principiante
Messaggi: 65
Iscrizione: giovedì 2 agosto 2007, 19:44

Re: [C] gcc - multiple definition of...

Messaggio da synack »

Codice: Seleziona tutto

//libmate.h
#ifdef LIBMATE_H

/* definisci qui LIB_SIMBOLI */

#endif
nico88desmo
Prode Principiante
Messaggi: 42
Iscrizione: martedì 5 settembre 2006, 16:59

Re: [C] gcc - multiple definition of...

Messaggio da nico88desmo »

synack ha scritto:

Codice: Seleziona tutto

//libmate.h
#ifdef LIBMATE_H

/* definisci qui LIB_SIMBOLI */

#endif
Risolto.
Il problema era dovuto al fatto che LIB_SIMBOLI era un vettore di stringhe così definito:
char *LIB_SIMBOLI[] = {"1","2",..."10"};

ma questo non si può fare in un file header perchè il vettore non è una costante.
Allora ho risolto scrivendo il vettore in un altro file e, per farlo riconoscere agli altri, lo faccio mediante la parola chiave  `extern`
;D
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 3 ospiti