On Mon, 16 Nov 2020 13:35:30 +0100 Fons Adriaensen <f...@linuxaudio.org> wrote:
>On Mon, Nov 16, 2020 at 12:22:54PM +0000, Will J Godfrey wrote: > >> In GCC 8.3 doing that in a globally included header actually *creates* a >> multiple definitions error! >> >> #ifndef GLOBALS_H >> #define GLOBALS_H >> >> const unsigned int ADD_COLOUR = 0xdfafbf00; fine > >Putting a definition in a header file is usually a bad idea. >What you get from this (without 'extern' is a separate copy >in each file that includes the header. GCC 8 will not flag >this as an error. > >> extern const unsigned int ADD_COLOUR = 0xdfafbf00; boom! > >This normally should not create ADD_COLOUR, just tell the >compiler that it exists somewhere. So this should result >in an 'undefined' error. > >If OTOH you get a 'multiple definition' error that would >normally mean there are other definitions as well. Maybe >you had this in a number of files, decided later to make >it a single global, and forgot to delete the originals ? > >Ciao, > Not wishing to hijack this thread but I'm still confused :( I just did a search of the whole of src. It's *used* about a dozen times across 5 otherwise unrelated .cpp files, but is only defined here. Just to be certain, I did a make clean before trying this again, and it's definitely saying multiple defs e.g /usr/bin/ld: CMakeFiles/yoshimi.dir/UI/WidgetMWSlider.cpp.o:(.rodata+0x0): multiple definition of `ADD_COLOUR'; CMakeFiles/yoshimi.dir/Interface/InterChange.cpp.o:(.rodata+0x1840): first defined here This happens at the linker stage. Also, I thought the whole idea of putting things like this in a #ifndef/#def block was to ensure it was only set once. -- It wasn't me! (Well actually, it probably was) ... the hard part is not dodging what life throws at you, but trying to catch the good bits. _______________________________________________ Linux-audio-dev mailing list Linux-audio-dev@lists.linuxaudio.org https://lists.linuxaudio.org/listinfo/linux-audio-dev