title: ARM compilation error, VFP registers used by executable, not object file
body: <p>I have been having this problem for the last few days and I can't get my head around what is really happening here, or what is the problem.</p>
  
  <p>I have a makefile with these flags:</p>
  
  <pre><code>CC = arm-linux-gnueabihf-gcc-4.6
  FLAGS = -O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -ftree-vectorize -mfloat-abi=softfp -std=gnu99
  </code></pre>
  
  <p>I have a library in a .a file, which has some object files, all I need to do is link them in with my executable.  I know the prototypes and all that, the only thing that complains is the following:</p>
  
  <pre><code>/usr/bin/ld: error: *EXECUTABLE* uses VFP register arguments, *OBJECTFILE* does not
  /usr/bin/ld: failed to merge target specific data of file *OBJECTFILE*
  </code></pre>
  
  <p>When I don't use the -mfloat-abi=softfp, I get another error relating to floating point registers.</p>
  
  <p>Does anyone have any idea what is causing this, and what I can do to fix this, such as making it so that my executable does not use Virtual Floating Point Register arguments?</p>
  
  <pre><code>x@x:~/Desktop/perf_test$ make
  arm-linux-gnueabihf-gcc-4.6 -c -O3 -march=armv7-a -mtune=cortex-a9 -mfpu=neon -ftree-vectorize -std=gnu99 -mfloat-abi=softfp  perf_test.c ../baseline/util.c
  arm-linux-gnueabihf-gcc-4.6 -o perf_test perf_test.o util.o  ../baseline/lib.a
  /usr/bin/ld: error: perf_test uses VFP register arguments, perf_test.o does not
  /usr/bin/ld: failed to merge target specific data of file perf_test.o
  /usr/bin/ld: error: perf_test uses VFP register arguments, util.o does not
  /usr/bin/ld: failed to merge target specific data of file util.o
  /usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(a.o) does not
  /usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(a.o)
  /usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(b.o) does not
  /usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(b.o)
  /usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(c.o) does not
  /usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(c.o)
  /usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(d.o) does not
  /usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(d.o)
  /usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(e.o) does not
  /usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(e.o)
  /usr/bin/ld: error: perf_test uses VFP register arguments, ../baseline/lib.a(f.o) does not
  /usr/bin/ld: failed to merge target specific data of file ../baseline/lib.a(f.o)
  collect2: ld returned 1 exit status
  make: *** [perf_test] Error 1
  </code></pre>