title: Multiple definition and header-only libraries
body: <p>I have a C program with several c and h files. I decided to make one part of the program 'header-only' so I moved the code from c to h. Now I'm getting multiples definition problems and I have no idea why. e.g.:</p>
  
  <pre><code>main.c includes utils.h
  vector.c includes utils.h
  </code></pre>
  
  <p>I moved everything in utils.c to utils.h (and of course removed utils.c from the project). utils.h starts with</p>
  
  <pre><code>#ifndef UTILS_H_
  #define UTILS_H_
  
  // and end with:
  #endif
  </code></pre>
  
  <p>To be sure my guard was unique I tried changing it (e.g.: UTILS718171_H_) but it doesn't work.</p>
  
  <p>Still, the compiler complains: </p>
  
  <pre><code>/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
  ...
  </code></pre>
  
  <p>The problem might be something like: all c files are compiled and get their own version of the code and then at linkage it causes problem, but I have honestly no idea how to solve this problem.</p>