Hi, ccache is not handling pre-compiled headers properly with gcc-4.1.2. devaus120>> cat test.hxx class WhoCares { public: int x; }; devaus120>> g++ -xc++-header test.hxx devaus120>> d test.* -rw-r--r-- 1 ssmedley ss 38 Jan 16 16:33 test.hxx -rw-r--r-- 1 ssmedley ss 1.1M Jan 16 16:33 test.hxx.gch devaus120>> ccache g++ -xc++-header test.hxx /usr/lib/gcc/i386-redhat-linux/4.1.2/../../../crt1.o: In function `_start': (.text+0x18): undefined reference to `main' collect2: ld returned 1 exit status devaus120>> ccache -V ccache version 3.1.7 Copyright (C) 2002-2007 Andrew Tridgell Copyright (C) 2009-2011 Joel Rosdahl This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. devaus120>> uname -a Linux DEVAUS120 2.6.18-194.17.1.el5 #1 SMP Wed Sep 29 12:51:33 EDT 2010 i686 athlon i386 GNU/Linux devaus120>> g++ -dumpversion 4.1.2 Scott.
Interestingly, passing -c flag makes it work! But why does g++ only need -c when used with ccache?
For that invocation, ccache runs something like this under the hood: /usr/bin/g++ -x c++-header -o a.temporary.file test.hxx Apparently, g++ 4.1 doesn't like the split of -xc++-header into two arguments: % g++ -x c++-header test.hxx /usr/lib/crt0.o: In function `___start': : undefined reference to `main' As you mentioned, adding -c also makes it work. g++ 4.3 and newer work fine regardless. I could perhaps make ccache use -xc++-header, but that feels kind of silly since it's not documented that way. Adding -c doesn't feel right either. Sigh.
Fixed in 4520fd7cb0bb01eea00b6fd57f40c174a0c4e6be.
Fix included in v3.1.8.