I would assume that the code should work as is from the GitHub?
Funniest thing I read today!
Yes, at a quick glance
g_sbox_enc is
defined multiple times, as the linker notices.
Just add extern to its tentative definition in sboxgates.h, changing it into a declaration:
extern uint8_t g_sbox_enc[256];
and add a definition in sboxgates.c:
uint8_t g_sbox_enc[256];
This, in the assumption that that object needs to be shared across translation units instead of being a separate object for each file.
(I have not read the code nor do I intend to read/try/debug it).