Toon posts:

[c] Multiple definition fout bij compilen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig een progje onder Linux te schrijven, en tot zo ver gaat het heel goed (misschien horen jullie er nog eens wat van als het de alpha-fase bereikt :)). Alleen kom ik nu bij het compilen op een foutje:
code:
1
2
3
4
5
6
7
8
9
root@Argon:/home/junkyard/mp3ir# gcc -o irexec irexec.c playsong.c \
-I/usr/local/include/lirc -I/usr/local/mysql/include/mysql \
-llirc_client -lmysqlclient -lncurses -lz
/tmp/cc5JqZ9j.o(.data+0x0): multiple definition of `playlength'
/tmp/ccJZtITX.o(.data+0x0): first defined here
/tmp/cc5JqZ9j.o(.data+0x4): multiple definition of `rows'
/tmp/ccJZtITX.o(.data+0x4): first defined here
collect2: ld returned 1 exit status
root@Argon:/home/junkyard/mp3ir#

Ik heb al wat gezocht op Google, en zelf gevonden, maar ik heb geen concrete oplossingen gevonden hoe ik dit probleem moet traceren en oplossen.

Help!
Bvd, :)

[edit] Misschien moet ik gewoon wat meer info hebben over hoe het compilen onder Linux eigenlijk in z'n werk gaat, ik weet hier namelijk niets van af, maar waar o waar zou ik dat moeten zoeken..? [/edit]

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Misschien zorgen dat je bepaalde dingen niet dubbel definieert?

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
Op maandag 07 januari 2002 17:55 schreef dusty het volgende:
Misschien zorgen dat je bepaalde dingen niet dubbel definieert?
Hmm, Engels kunnen we allemaal, maar bij die dubbele definities ligt dus het probleem.. Ik gebruik één definitie bestand zeg maar, functies.h en die wordt in beide sourcefiles, irexec.c en playsong.c, geinclude omdat elke file alle definities uit functies.h nodig heeft.. In theorie (geen idee hoe het echt gaat) worden dus variabelen 2x gedefinieerd --> oplossing probleem, maar waarom geeft ie dan alleen bij deze twee vars een multiple definition error en niet bij alle andere vars die in functies.h staan gedefinieerd...?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

#ifdef
#def
blaaaaaaaaaaaaaaaat
#endif

oid in je header
should solve it i think :)

Doet iets met Cloud (MS/IBM)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

ik vermoed dat jij de variabelen niet als extern declareert

extern wil zeggen dat de variabele wel bestaat, maar niet in de huidige source file gedeclareerd is.

Het idee is dat je de variabelen extern declareert in de headers, en gewoon in de sourcefile waar ze moeten komen te staan

dus in de header:
code:
1
2
extern int playlength;
extern int rows;

en in 1 van de source files:
code:
1
2
int playlength;
int rows;

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • igmar
  • Registratie: April 2000
  • Laatst online: 09-09 19:53

igmar

ISO20022

-llirc_client -lmysqlclient -lncurses -lz
/tmp/cc5JqZ9j.o(.data+0x0): multiple definition of `playlength'
/tmp/ccJZtITX.o(.data+0x0): first defined here
/tmp/cc5JqZ9j.o(.data+0x4): multiple definition of `rows'
/tmp/ccJZtITX.o(.data+0x4): first defined here
collect2: ld returned 1 exit status
root@Argon:/home/junkyard/mp3ir#[/code]
Al eerste : Niet linux specifiek, elke compiler kent dit probleem. Het probleem in dit geval is dat jij globale variabelen in meerdere .c files definieerd.

3 oplossingen :

1) Geen globale variabelen gebruiken
2) In een van de 2 files de globale variabele als extern declareren
3) De variabelen als static declareren

1 spreekt voor zich, 2 :

in 1 file :

int bla;

in de 2de file :

extern int bla;

3 :

static int bla;

Hou er wel rekening mee dat als je een variabele (of functie) static declareert de scope beperkt is tot .c file zelf !!
Pagina: 1