如何在64位Linux上构建32位Python 2.6?

9 投票
2 回答
16996 浏览
提问于 2025-04-16 05:02

我今天下午一直在尝试让 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/

按照上面的描述操作后,我得到了以下输出:

http://pastebin.com/eP8WJ8V4

我已经安装了 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 个回答

4

关于这个问题,Kirk(可能还有其他人)在想为什么,这里有个例子:我有一个Python应用程序,里面有很多字典,字典里又包含字典,里面存的是一些轻量级的对象。这种结构在64位系统上占用的内存几乎是32位系统的两倍,主要是因为指针的原因。我需要运行几个每个占用2GB内存的32位实例,而额外的内存消耗很快就会累积起来。对于FreeBSD,这里有一个关于如何在64位系统上运行32位环境的详细教程:http://www.gundersen.net/32bit-jail-on-64bit-freebsd/

11

你需要给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 选项。

撰写回答