如何在64位Linux上构建32位Python 2.6?
我今天下午一直在尝试让 Python 在 32 位模式下构建,但一直卡住。我使用的是一台运行 openSUSE 11.3 的 64 位 Linux 机器,已经安装了必要的 -devel 和 -32bit 包,以便在 32 位模式下构建应用程序。
看起来 Python 构建的问题不在于 make 命令本身,而是在 make 之后运行的 setup.py。
我找到了一些关于 Ubuntu Linux 的说明:h**p://indefinitestudies.org/2010/02/08/how-to-build-32-bit-python-on-ubuntu-9-10-x86_64/
按照上面的描述操作后,我得到了以下输出:
我已经安装了 libreadline、libopenssl 等的 -32bit 包,但它们当然是在 /lib 和 /usr/lib 下,而不是 /lib64 和 /usr/lib64。
当我启动这个构建出来的 Python 可执行文件时,我得到了:
./python
Python 2.6.6 (r266:84292, Oct 5 2010, 21:22:06)
[GCC 4.5.0 20100604 [gcc-4_5-branch revision 160292]] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Traceback (most recent call last):
File "/etc/pythonstart", line 7, in <module>
import readline
ImportError: No module named readline
那么,如何让 setup.py 识别 LDFLAGS=-L/lib 这个命令呢?
非常感谢任何帮助。
祝好,
Philipp
2 个回答
关于这个问题,Kirk(可能还有其他人)在想为什么,这里有个例子:我有一个Python应用程序,里面有很多字典,字典里又包含字典,里面存的是一些轻量级的对象。这种结构在64位系统上占用的内存几乎是32位系统的两倍,主要是因为指针的原因。我需要运行几个每个占用2GB内存的32位实例,而额外的内存消耗很快就会累积起来。对于FreeBSD,这里有一个关于如何在64位系统上运行32位环境的详细教程:http://www.gundersen.net/32bit-jail-on-64bit-freebsd/
你需要给gcc和ld这两个工具传递一些特定的参数,告诉编译器要生成32位的程序。
可以使用 --build
和 --host
这两个选项。
./configure --help
System types:
--build=BUILD configure for building on BUILD [guessed]
--host=HOST cross-compile to build programs to run on HOST [BUILD]
在64位的Linux系统中,如果你想编译成32位的Linux程序,就需要使用 ./configure --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu
这个命令。
注意:你还需要添加其他的 ./configure
选项。