Python 在virtualenv中编译mod_wsgi时遇到的问题

Python 在virtualenv中编译mod_wsgi时遇到的问题,python,mod-wsgi,virtualenv,Python,Mod Wsgi,Virtualenv,我试图在CentOS服务器上编译mod_wsgi(3.3版),即Python2.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: 无法读取符号:错误值 根据,可能是libpython2.6.a

我试图在CentOS服务器上编译mod_wsgi(3.3版),即Python2.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: 无法读取符号:错误值

根据,可能是libpython2.6.a文件:

  • 不是吗
  • 不是用共享的方式生成的
  • 是为32位计算机而不是64位计算机生成的
嗯,文件在正确的位置,并且可读。我试图用
--enable shared
选项重新编译Python2.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位——如果有人能证实这一点,我将不胜感激

我试着在mod_wsgi Makefile中同时使用和不使用--python=/home/[…]/python2.6进行配置,两种方法都失败了

我还尝试在
virtualenv
之外使用Python 2.4编译mod_wsgi,效果很好。不幸的是,如果我要使用
virtualenv
:),这对我没有帮助


任何人都知道如何让mod_wsgi在
virtualenv
下编译吗?

文档的相关部分包括:

这提到了-fPIC问题

以及:

这提到当mod_wsgi找不到共享库时,需要使用LD_RUN_PATH

有关共享库问题以及mod_wsgi发现Python安装错误的问题的更多信息,请访问:


您应该使用
-fPIC
重新编译
libpython2.6.a
,以生成对象

例如:

gcc -fPIC -g -c -Wall xxx.c

如果您是从源代码构建Python的,请添加--enable-shared-to-configure。(它添加了-fPIC)

注意-我只是尝试了不在
virtualenv
下编译,但仍然使用python指向最新版本,如中所做,但也没有效果。从新的python源代码树开始,再次使用--enable shared选项。在使用不同的选项重新编译旧源代码时,您可能没有正确地清理掉它。@Graham,谢谢,实际上,我刚刚完成了这项工作-但一个区别是,我在命令行的末尾,在--with python之后,放了--enable shared选项,它工作了。另外,当我编译mod_wsgi时,它没有出现错误-不幸的是,在mod_wsgi.so文件上执行ldd命令时,我发现
libpython2.6.so.1.0未找到
。它看起来在所有正确的地方,但我可能会开始将它链接到随机位置,看看会发生什么。:)--enable shared标志用于配置以构建Python,而不是mod_WSGI。在mod_WSGI站点中搜索LD_RUN_路径,以解决mod_WSGI在运行时找不到共享库的问题。@Graham,叹气。。。我的意思是在编译Python时使用前缀。我怀疑它首先需要前缀。对不起,我整天都在盯着这个屏幕,试图让它工作,结果打错了。对我来说是一个很好的链接。非常感谢。你们中一些从以上链接中受益的人可能还需要仔细查看