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?
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
add
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.