I tried it on a linux workstation (6.8.0-59-generic #61~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Apr 15 17:03:15 UTC 2 x86_64 x86_64 x86_64 GNU/Linux). Still got the same messages. Here are the last few lines:
/usr/bin/ld: output.o:(.bss+0x194): multiple definition of `EXTRACOLS'; structure.o:(.bss+0x19c): first defined here
/usr/bin/ld: output.o:(.bss+0x198): multiple definition of `PHENOTYPE'; structure.o:(.bss+0x1a0): first defined here
/usr/bin/ld: output.o:(.bss+0x19c): multiple definition of `POPFLAG'; structure.o:(.bss+0x1a4): first defined here
Its seems the issue is that there are due to multiple definitions of global variables across C source files. I think its because you need to distinguish between definition and declaration of global variables. Its like in params.c seed needs to be defined as "int SEED;" and in params.h it needs to be declared as "extern int SEED;". Does that make sense?