MPLink Error

We ran into a problem when we tried defining unsigned chars in a header file and running into a Linker error that claimed that a variable had multiple definitions.

This is what we have in the header file which causes the error:
long int KP_P = 5;

This is the error given by the Linker:
Error - symbol ‘KP_P’ has multiple definitions.

This source code does not cause an error:
#define KP_P (5)

Declaring the variable as a long int in the *.c file does not cause any errors, it is only in the header file that it causes the error.

Has anyone run into this error or is it a bug in the Linker?

It is not a bug in the linker.

When you declare a long int in the header file, every time a .c includes this header file, space will be allocated for KP_P. Even if you have the #ifndef _header_file_name_h #define _header_file_name_h at the top of the file.

Here is the solution:

declare lont int KP_P in a .c file.
However, also

extern long int KP_P;
in the header file.
Now, if you include this header file, you should be able to use KP_P.

Another comment:
the define doesn’t show an error, because it is essentially a copy paste operation, and the compiler is smart enough to figure it out.

This is not a bug. KP_P is defined somewhere else. Either fiond out where or change the variable name.