Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I'm trying to build the PHP memcache extension (v2.2.6) for i386 (32bit) on my x86_64 Ubuntu 11.04.

./configure uses config.guess by default (which outputs x86_64-unknown-linux-gnu on my system) but I want to override that.

How would I have to proceed?

share|improve this question

1 Answer 1

up vote 3 down vote accepted

You need two things to cross-compile: a compiler that can generate code for the target architecture, and the static libraries (*.a) for the target architecture. Install at least the libc6-dev-i386 Install libc6-dev-i386 packages, and possibly other lib32.*-dev packages. The libc6-dev-i386 also pulls in the components of gcc needed for cross-compilation in the gcc-multilib package Install gcc-multilib. Then tell gcc to compile for i386 by passing it the -m32 flag through the CFLAGS variable.

sudo apt-get install libc6-dev-i386 lib32ncurses5-dev … # whatever 32-bit libraries you need
export CFLAGS='-m32'
./configure …

If you don't find all the libraries you need, it'll probably be easier to install a 32-bit Ubuntu in a chroot. Ubuntu ships dchroot Install dchroot from the Debian buildd project, which makes running a chrooted system easy. Use debootstrap Install debootstrap to perform the installation. There's a reasonable-looking dchroot tutorial on the Ubuntu forums.

share|improve this answer
    
Thank you for your answer, regretfully I wasn't able to cross-compile. I did everything like you suggested and got no errors but the output .so file was still a 64bit ELF. I'm trying the chroot alternative right now. –  thwd May 7 '11 at 20:22
    
ok I ended up setting up a 32bit virtual machine and building it over there. –  thwd May 7 '11 at 21:34

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.