extern t_opp* gl_opptab is not the same as the array of structs defined in the header. Try extern t_opp gl_opptab[]; in the other .c file. Of course the other .c file will need to know what a t_opp is, so there's at least one more header that'll need inclusion in the other .c file.