Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I am trying to get a modern GCC to compile on Centos 6.4. The problem is that Centos does not have a modern glibc and GCC 4.8.x and 4.7.x keep giving me the following compile error:

... -DL_gcov -c ../../.././libgcc/libgcov.c
In file included from /usr/include/features.h:385:0,
                 from /usr/include/stdio.h:28,
                 from ../../.././libgcc/../gcc/tsystem.h:88,
                 from ../../.././libgcc/libgcov.c:29:
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory

The problem here is the gnu/stubs-32.h is part of the modern glibc and Centos 6.4 doesn't seem to have it. I've tried building my own glibc but as soon as it gets installed and in my local LD_LIBRARY_PATH I can't run any other programs, because all of the existing executables on the system try to link against it and they fail.

I want to use the new compiler because it has dramatically better handling of C++ STL code, and because the optimizer in GCC 4.8 makes my code run in 1/2 the time as the GCC 4.4.7 compiler that comes with Centos.

Any suggestions on how to do this?

share|improve this question
    
Do you really, absolutely, need the newer compiler?! –  Michael Hampton Jul 16 '13 at 18:27
    
My code runs in 1/2 the time with the better compiler. The code is running on a supercomputer and takes 3-7 days to run. Without the better compiler, it takes 6-14 days to run. –  vy32 Jul 16 '13 at 21:53
    
In that case, do you really, absolutely, need the older OS distribution? –  Michael Hampton Jul 16 '13 at 22:30
    
We are not able to upgrade the system. –  vy32 Jul 17 '13 at 0:50
2  
It sounds like you might not have much of a choice. –  Michael Hampton Jul 17 '13 at 0:54

2 Answers 2

up vote 3 down vote accepted

Ahh, welcome to the fun of super outdated libraries. I've run into similar problems, and our solution was to compile a second version of GLIBC and explicitly use that when starting software.

I've only had to do this on CentOS 5, so you may be able to get away with higher software versions then I mention.

You'll need to build GLIBC like this:

CFLAGS='-march=i686 -O2' ../configure --prefix=/home/glibc215 \
  make -j 4 && make install

(I was using GLIBC 2.15, similar commands should work with newer versions)

Once it's built, manually run your app with something like this:

/home/glibc215/lib/ld-linux.so.2 --library-path /home/glibc215/lib/:. /bin/bash

Things are going to be further complicated by the fact you need a modern version of GCC. I don't have a decent solution for you, you're going to need to play around with running things with the alternate version of glibc in order to get your newer gcc to build properly.

share|improve this answer
    
Thanks. I believe this will work. However, I found another solution, and that is to do the compiles on another system and distribute the binaries and shared libraries to this system. That's also ugly, but I think that it works too. –  vy32 Jul 17 '13 at 11:08

You could install a newer glibc into ~/lib and install gcc in ~/bin and linking against the newer glibc. I'd advise to use that only for your application that runs on the supercomputer and to link everything (including libc) statically to avoid making a bigger mess than you'll have to make for this.

It's not a particularly neat/elegant solution, but it may just get the job done. I did something similar years ago when mucking about with ld.so and not wanting to mess up the entire system :-)

share|improve this answer
    
Actually, I tried this and it didn't work. As soon as the shared libraries were installed in the directory, all existing binaries stopped working. Many of the tools require the new libraries to build. –  vy32 Jul 17 '13 at 0:50

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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