Definições múltiplas e bibliotecas apenas de cabeçalho

Tenho um programa C com vários arquivos c e h. Decidi fazer uma parte do programa 'somente cabeçalho', então mudei o código de c para h. Agora estou tendo vários problemas de definição e não faço ideia do porquê. por exemplo.

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

Movi tudo em utils.c para utils.h (e, obviamente, removi o utilitários.c do projeto). utils.h começa com

#ifndef UTILS_H_
#define UTILS_H_

// and end with:
#endif

Para ter certeza de que minha proteção era única, tentei alterá-la (por exemplo: UTILS718171_H_), mas não funcion

Ainda, o compilador reclama:

/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
...

O problema pode ser algo como: todos os arquivos c são compilados e obtêm sua própria versão do código e, na ligação, causa um problema, mas sinceramente não tenho idéia de como resolver esse problem

questionAnswers(4)

yourAnswerToTheQuestion