Recently I've done emerge -e world and then found that gcc was compiled without cxx flag. Now I can't compile any C++ package due to

configure: error: C++ preprocessor "/lib/cpp" fails sanity check

I'm thinking on copying files returned by equery f gcc|grep -v share from stage3. Will it help? Is there any simpler way?

UPDATE 1 Here's my config.log

UPDATE 2 Here's my make.conf Please, note there's cxx flag in USE. I've added it recently, but it does not help as I can't rebuild packages.

UPDATE 3 I have tried to reinstall gcc-4.6.3 from binary package via

emerge -avK gcc:4.6

It completed successfully but error didn't go.

Also, I've noticed that:

configure:11955: /lib/cpp  conftest.cpp
cpp: error: conftest.cpp: C++ compiler not installed on this system
configure:11955: $? = 1
configure: failed program was:
| /* confdefs.h */
| #define PACKAGE_NAME "expat"
| #define PACKAGE_TARNAME "expat"
| #define PACKAGE_VERSION "2.1.0"
| #define PACKAGE_STRING "expat 2.1.0"
| #define PACKAGE_BUGREPORT "expat-bugs@libexpat.org"
| #define PACKAGE_URL ""
| #define STDC_HEADERS 1
| #define HAVE_SYS_TYPES_H 1
| #define HAVE_SYS_STAT_H 1
| #define HAVE_STDLIB_H 1
| #define HAVE_STRING_H 1
| #define HAVE_MEMORY_H 1
| #define HAVE_STRINGS_H 1
| #define HAVE_INTTYPES_H 1
| #define HAVE_STDINT_H 1
| #define HAVE_UNISTD_H 1
| #define HAVE_DLFCN_H 1
| #define LT_OBJDIR ".libs/"
| /* end confdefs.h.  */
| #ifdef __STDC__
| # include <limits.h>
| #else
| # include <assert.h>
| #endif
|                    Syntax error

Looks like it claims that C++ compiler is not installed on my system. But this sounds like rubbish, since gcc:4.6 was installed from bin-package and I assume it's compiled with C++ support.

UPDATE 4 Indeed there's a problem with g++

uhradio ~ # g++ queue.cpp 
gcc-config: error: could not run/locate 'g++'
uhradio ~ # cpp queue.cpp 
cpp: error: queue.cpp: C++ compiler not installed on this system

The output from gcc-config -l is:

[1] x86_64-pc-linux-gnu-4.6.3 *
  • What does which g++ say? Run the command from update 4 with -v, so it tells you exactly what it is trying to do, and hunt down the programs it is trying to run. I believe your diagnosis is correct, you didn't build GCC with C++ support, that's all. – vonbrand Jan 25 '13 at 12:12
  • Did you add the CXX flag inside or outside of the chroot? – eyoung100 Dec 14 '14 at 2:16

This is probably what you're looking for. In short, install the kernel headers and you should be set.

  • linux-headers-3.6 was installed, problem still persist – archer Jan 25 '13 at 10:03
  • This being the case, I'd go with a reinstall, with /home and the important files (e.g. make.conf) backed up. In terms of time spent, you are probably better off. – schaiba Jan 25 '13 at 10:12
  • that's absolutelly impossible as this is remote box. This system is fresh and clean but only fails sanity check is my issue. – archer Jan 25 '13 at 10:16
  • Please paste your make.conf as well. – schaiba Jan 25 '13 at 10:46

Although emerge -avK gcc:4.6 didn't help I've manually extracted gcc-4.6.3.tbz2 into / directory then set gcc-config 1 and it helped (although my /usr/lib has gone after that operation, I've manually symlinked it back to /usr/lib64. Now I'm rebuilding both gcc's (4.5 and 4.6) with cxx USE flag.

My quesion now turns into another one. What's the reason cxx USE flag gone from my system built from stage3? I'm installing gentoo linux for years and never explicitly set cxx USE flag like now.

  • You really need to reinstall... the CXX flag is inherited from the profile using eselect profile If you never set the profile, you're going to spend more time repairing damage than using the system. – eyoung100 Dec 14 '14 at 2:18

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.