【发布时间】:2011-09-01 07:10:31
【问题描述】:
我正在尝试在 CentOS 服务器上编译 mod_wsgi(版本 3.3)、Python 2.6 - 但在 virtualenv 下,没有成功。我收到了错误:
/usr/bin/ld: /home/python26/lib/libpython2.6.a(node.o): 针对 `a 重定位 R_X86_64_32 局部符号'不能使用时 制作共享对象;重新编译 -fPIC
/home/python26/lib/libpython2.6.a: 无法读取符号:错误值
根据mod_wsgi Installation Issues docs,可能是libpython2.6.a文件:
- 不存在
- 不是用 shared 生成的
- 是为 32 位机器生成的,而不是 64 位机器。
嗯,文件在正确的位置,并且可读。我尝试使用 --enable-shared 选项重新编译 Python 2.6,但整个编译过程都崩溃了,几乎每个文件都给出了相同的错误,即 libpython2.6.a软管。
我不知道 Python 是为 64 位编译的,但是当我运行它时:
import platform
print platform.platform()
>>>Linux-2.6.18-028stab070.4-x86_64-with-redhat-5.6-Final
由于 Python 认为它在 x86_64 上,我希望它编译为 64 位 - 如果有人有任何方式确认,我将不胜感激。
我尝试使用和不使用 --python=/home/[...]/python2.6 来配置 mod_wsgi Makefile,两种方式都失败了。
我还尝试使用 Python 2.4 编译 virtualenv 的 outside 的 mod_wsgi,效果很好。不幸的是,如果我要使用virtualenv,这对我没有帮助:)
有谁知道我怎样才能让 mod_wsgi 在virtualenv 下编译?
【问题讨论】:
-
注意 - 我刚刚尝试在
virtualenv下编译 not,但仍将 --with-python 指向最新版本,就像在 this article about wsgi 中所做的那样,但这也没有效果。 -
从新的 Python 源代码树开始,然后使用 --enable-shared 选项再次执行。使用不同的选项重新编译旧源时,您可能没有正确清理旧源。
-
@Graham,谢谢,实际上,我刚刚完成了 - 但一个不同之处在于我将 --enable-shared 选项放在了命令行的 end 中,在 --with-python 之后,它起作用了。此外,当我编译 mod_wsgi 时,它没有出错 - 不幸的是,对 mod_wsgi.so 文件执行 ldd 命令给了我
libpython2.6.so.1.0 not found。它看起来在所有正确的地方,但我可能会开始将它链接到随机位置,看看会发生什么。 :) -
--enable-shared 标志用于配置用于构建 Python 而不是 mod_WSGI。通过 mod_WSGI 站点搜索 LD_RUN_PATH 来解决 mod_WSGI 在运行时找不到共享库的问题。
-
@Graham,叹息...我在编译 Python 时的意思是 --prefix 之前。我怀疑它首先需要前缀。抱歉,我整天盯着这个屏幕,试图让它工作,但输入错误。
标签: python mod-wsgi virtualenv