Hello! As the title suggests I'm getting an undefined symbol error from the linker when I try to compile something I coded. I won't paste it all, but I'll try to show you what I believe are the most relevant pieces. So I have
menus.h
Code:
typedef struct menuOps {
	int num;
	char *string[MAXOPS];
} menuOPS;
...
menuOPS op_splash = {4, { "string1" , "string2" , "string3" , "string4" } };

void menu_splash();
void menu(void (*menufunc)(void), menuOPS ops);
menus.c
Code:
#include "menus.h"

void menu(void (*menufunc)(void), menuOPS ops) {
...
}

void menu_splash() {
...
}
interface.h
Code:
#include <...>
                ...
int splash();
int parseOp();
interface.c
Code:
#include "interface.h"
#include "menus.h"

int splash() {
...
menu(&menu_splash,op_splash);
...
}
int main() { ... }
When compiling interface.c I get this error:
Code:
Undefined symbols:
  "_menu_splash", referenced from:
      _menu_splash$non_lazy_ptr in ccGrWt8C.o
  "_menu", referenced from:
      _splash in ccGrWt8C.o
ld: symbol(s) not found
I've been around this for hours, mostly because I can't understand the following:
If I move the op_splash declaration (line in red) inside menus.c then I don't get this error (Actually I get another one about op_splash not being declared, which is understandable). Does anyone have an idea about what I'm doing wrong?

Thanks