Definición múltiple y bibliotecas de solo encabezado

Tengo un programa en C con varios archivos c y h. Decidí hacer una parte del programa 'solo encabezado', así que moví el código de c a h. Ahora tengo problemas de definición múltiple y no tengo idea de por qué. p.ej.

main.c includes utils.h
vector.c includes utils.h

Moví todo en utils.c a utils.h (y, por supuesto, eliminé utils.c del proyecto). utils.h comienza con

#ifndef UTILS_H_
#define UTILS_H_

// and end with:
#endif

Para asegurarme de que mi protector era único, intenté cambiarlo (por ejemplo: UTILS718171_H_) pero no funciona.

Todavía, el compilador se queja:

/tmp/ccOE6i1l.o: In function `compare_int':
ivector.c:(.text+0x0): multiple definition of `compare_int'
/tmp/ccwjCVGi.o:main.c:(.text+0x660): first defined here
/tmp/ccOE6i1l.o: In function `compare_int2':
ivector.c:(.text+0x20): multiple definition of `compare_int2'
/tmp/ccwjCVGi.o:main.c:(.text+0x6e0): first defined here
/tmp/ccOE6i1l.o: In function `matrix_alloc':
ivector.c:(.text+0x40): multiple definition of `matrix_alloc'
/tmp/ccwjCVGi.o:main.c:(.text+0x0): first defined here
...

El problema podría ser algo así como: todos los archivos c se compilan y obtienen su propia versión del código y luego, en el enlace, causa un problema, pero honestamente no tengo idea de cómo resolver este problema.

Respuestas a la pregunta(4)

Su respuesta a la pregunta