El problema se debe a la diferencia entre declaraciones y definiciones. Si necesitas de una variable "global" (técnicamente estas no existen en C, son una combinación de "file scope" y "external linkage") debes
declarar la variable en el archivo de inclusión utilizando la palabra reservada "extern", por ejemplo:
/* Declaracion de la interfaz */
extern int x;
Esa variable la debes
definir en una sola unidad (sin utilizar "extern") y, por supuesto, fuera de toda función:
int x;
De esa forma tienes la declaración de la variable en varias unidades (al incluir el encabezado) y sola una definición (en la unidad que lo requiera).
Un saludo