[Numpy-discussion] building 32 bit numpy on 64 bit linux

David Jones david.jones74 at gmail.com
Fri Dec 13 12:46:25 EST 2013

On 12/13/13 11:24, Charles G. Waldman wrote:
>>>> this might work:
>>>> CC="gcc -m32" LDSHARED="gcc -m32" FF="gfortran -m32" linux32 python
>>>> setup.py build
> Compiler flags can't be added to CC, they should be in CFLAGS.  (and
> ld flags go into LDFLAGS).  Otherwise you are saying to use a program
> called "gcc -m32" (with a space in the name).
> On Fri, Dec 13, 2013 at 8:02 AM, David Jones <david.jones74 at gmail.com> wrote:
>> On 12/12/13 16:35, Julian Taylor wrote:
>>> On 12.12.2013 20:40, David Jones wrote:
>>>> On 12/12/13 15:54, Julian Taylor wrote:
>>>>> On 12.12.2013 19:58, David Jones wrote:
>>>>>> I'm trying to compile 32-bit numpy on a 64 bit Centos 6 system, but fails with the message:
>>>>>> "Broken toolchain: cannot link a simple C program"
>>> ...
>>>>> this might work:
>>>>> CC="gcc -m32" LDSHARED="gcc -m32" FF="gfortran -m32" linux32 python
>>>>> setup.py build
>>>> That didn't work. It says it can't find executable "gcc -m32". I tried
>>>> changing ccompiler.py, per the stackoverflow post. I got further that
>>>> time, but it fails with the message:
>> So this is what ended of working:
>> CC=gcc-32 LDSHARED=ld-32 LDFLAGS="-m32 -shared -L$LD_LIBRARY_PATH"
>> python2.7 setup.py build
>> Somehow the value of LD_LIBRARY_PATH gets lost along the way. Perhaps
>> distutils re-exports it with a different value, prior to calling the linker.
>> I was getting a gfortran error at one point, but I guess it inherits
>> -m32 from gcc-m32, so it doesn't have to be set explicitly.
>> I still want to look into the code, to see what's going on in there. I
>> may just write a custom config module, that allows me to pass in the
>> build flags more cleanly.
>>> weird it works for me with libpython2.7-dev:i386 installed on amd64
>>> Ubuntu 13.10 (multiarch is friggin great :D)
>>> But I had to add an additional LDFLAGS="-m32 -shared"
>>> CC="gcc -m32" LDSHARED="gcc -m32 -shared" LDFLAGS="-m32 -shared" linux32
>>> python setup.py build
>>> you should be able to work around this error message by writing small
>>> wrapper scripts for the compiler:
>>> cat << EOF > gcc-32
>>> #!/bin/sh
>>> gcc -m32 "$@"
>>> EOF
>>> ...
>>> CC=gcc-32 ....

Correction. Of course LD_LIBRARY_PATH isn't seen by the compiler. It 
only applies at run time. How embarrasing:) This isn't the first time 
I've been bitten by that.

I don't mind doing that with manual builds, but what about with pip? Is 
there a way to avoid explicitly setting the library path every time you 
call pip, when using a custom python install?

More information about the NumPy-Discussion mailing list