Your guard just prevents from importing twice in the same file. but not across files, so you end up with multiple definitions
you want global variables defined (memory allocated) in a .cpp. This way you are sure it's only done once. In the .h you just declare them extern. The linker will find them where they are.
You probably do not understand the meaning of your guards. Each .cpp file is compiled separately, your construction works only inside one file.
Thus, your globals.h file will be included in the compilation as many times as you have .cpp files in your project - if there are more than one, you will get a variable redefinition error.
The "extern" declarations should reside in the common header file. A separate .cpp file or the program main file then contains all non-extern declarations.