32 bit builds on 64 bit CentOS 5 hosts

32bit-64bitcentosgccvalgrindyum

I am trying to build valgrind (3.7.0) on a 64 bit host (running CentOS 5.8). I need to use valgrind in examining the performance of a 32 bit program (built on a 32 bit host, I need 32 bit because the program needs to run on 32 bit and 64 bit hosts).

The problem is that my 64 bit host did not have gcc, so I installed gcc using "sudo yum install gcc" with the Stanford University repo mirror (the default repos for this 64 bit host were unavailable and thus yum was timing out). This allowed me to build valgrind, and it worked for local stuff (e.g. "valgrind ls -l"), but failed when trying to run it for the 32 bit program I have built on another host. I finally figured out that the configure script for valgrind was detecting that I did not have 32 bit build support on the host (by running "configure –enable-only32bit" which reported "checking for 32 bit build support… no").

So how do I get 32 bit support for gcc, etc? I tried "yum search gcc | grep i386" and then installing whatever looked like 32 bit C stuff ("sudo yum install compat-glibc.i386 compat-libgcc-296.i386 compat-libstdc++-296.i386 compat-libstdc++-33.i386 libgcc.i386 libstdc++.i386 libstdc++-devel.i386 libstdc++44-devel.i386 edac-utils.i386 edac-utils.x86_64 nspluginwrapper.i386") but "configure –enable-only32bit" still reports no 32 bit support.

PS: The yum.conf looks pretty minimal, i.e. no excludes. The only odd thing in it is "installonly_limit = 5"

OK, here is the scoop, thanks to Error "gnu/stubs-32.h: No such file or directory" while compiling Nachos source code

The short answer is to install glibc-devel.i386 (on CentOS 5.8 anyway… for different distros it has different names, e.g. glibc-devel.i686, libc6-dev-i386, etc), possibly in addition to the other packages I listed above (I did not uninstall those to see if glibc-devel.i386 was sufficient by itself).

I arrived at the right question to search for by examining the configure script and seeing that it tries to compile a minimal C program with "-m32" and if that fails then the configure script reports "no 32 bit support". So I created the classic HelloWorld C program and compiled it ("cc -m32 hello.c"). This complained of a missing header file "gnu/stubs-32.h". So a google search on "what package has gnu/stubs-32.h" took me to the stackoverflow page I cite above.

Best Answer

Try:

yum install glibc-devel.i686

if this doesn't work then check this solution: How to compile a 32-bit binary on a 64-bit linux machine with gcc/cmake

Related Topic