We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello all, My project with 3 files as following ,the MAIN is in sys.c,all 3 files are compiled well each other. File a: including sys.c and common.h File b: including rtk.c and rtk.h File c: including blt.c and blt.h rtk.h: ... extern uchar code rtk_Cmd[20]={...}; extern struct Time {uchar Sec;...}; extern struct Date {...}; extern struct Time sGps; ... rtk.c: #include <rtk.h> ... syc.c: #include <common.h> #include <rtk.h> #include <blt.h> .... void main() { ... Func1(sGps.Sec); Func2(rtk_Cmd); ... } when build all files, the error L104:mutiple public defintion (rtk_cmd) Warning L1: unresolved external symbol(sGps). Give me your hands ,thanks a lot!
And now, rtk.h: struct MesInfo {...}; struct MesInfo GpsInfo; ... rtk.c: #include<rtk.h> ... Func1(GpsInfo.*); ... sys.c: #include<common.h> #include<rtk.h> void main() { ... Func2(GpsInfo.*) ... } all *.c can be compiled well. Even in the common.h has "extern struct MesInfo GpsInfo;"or not.when built all files,"error L104 :Mutiple public defintion(GpsInfo)" is show.What's the matter?
You have DECLARED GpsInfo in rtk.h Then, you include rtk.h in both rtk.c and sys.c files - therefore you have declared it twice (in both of files) - resulting in "Multiple public definition" error. - Dejan
Thank you for your help. I have resolved it as follow: rtk.h: struct MesInfo { ... } rtk.c: #include<rtk.h> struct MesInfo GpsInfo; .... sys.c: #include<rtk.h> extern struct MesInfo GpsInfo; ... In this way,all files can be build ,is it right?
In this way,all files can be build ,is it right? It may work, but it's not right. As a rule of thumb: never write 'extern' in a .c file --- it only ever should appear in .h files. In your case, this line:
extern struct MesInfo GpsInfo;
"You have DECLARED GpsInfo in rtk.h Then, you include rtk.h in both rtk.c and sys.c files - therefore you have declared it twice (in both of files) - resulting in 'Multiple public definition' error." Not quite: He has defined GpsInfo in rtk.h - resulting in 'Multiple public definition' error. The definition must be in exactly one source file; there can be as many extern declarations as you like!