Thread: Linker Error
View Single Post
  #2   Spotlight this post!  
Unread 17-05-2004, 15:05
Gene F's Avatar
Gene F Gene F is offline
FIRST Fanatic
AKA: Gene Falendysz
#0343 (Metal in Motion)
Team Role: Engineer
 
Join Date: Mar 2002
Rookie Year: 2001
Location: Oconee County, SC
Posts: 218
Gene F is a splendid one to beholdGene F is a splendid one to beholdGene F is a splendid one to beholdGene F is a splendid one to beholdGene F is a splendid one to beholdGene F is a splendid one to beholdGene F is a splendid one to beholdGene F is a splendid one to behold
Send a message via AIM to Gene F
Re: Linker Error

Quote:
Originally Posted by maxlobovsky
I get the following error whenever i try to compile FRCcode with any variables declared in user_routines.h (in this case, "int bob;"):

MPLINK 3.40, Linker
Copyright (c) 2003 Microchip Technology Inc.
Error - symbol 'bob' has multiple definitions.
Errors : 1


I'm positive i don't have multiple definitions. It appears that user_routines.h is being included several times. i understand repeated #defines would be protected by the

Code:
#ifndef __user_program_h_
#define __user_program_h_
....
#endif

but how do i protect real code (not #define's) from being repeatedly inserted?

The program compiles fine with the variables in user_routines.c, i'd just prefer these global constants to be in the header for convenience.
The problem is that you are decalring bob in the header. It needs to be declared in the user_routines.c file and externed in the user_routines.h file.

So in user_routines.c it would look like:
int bob;
In user_routines.h it would be:
extern int bob;

What's happening is that each file that includes user_routines.h is creating a new copy of bob rather than just getting a reference to it.

Some compilers/linkers let you decare in the header file but in general it is not supported.
__________________
- Gene Falendysz