在虚拟环境中编译mod_wsgi的问题
我在CentOS服务器上尝试编译mod_wsgi(版本3.3)和Python 2.6,但是在virtualenv
环境下,结果一直失败。出现了这样的错误:
/usr/bin/ld: /home/python26/lib/libpython2.6.a(node.o): 不能在创建共享对象时使用本地符号的R_X86_64_32重定位;请使用 -fPIC重新编译
/home/python26/lib/libpython2.6.a: 无法读取符号:值错误
根据mod_wsgi安装问题文档,可能是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,试过两种方式,但都失败了。
我还尝试在virtualenv
外部编译mod_wsgi,使用Python 2.4,结果很好。不幸的是,如果我打算使用virtualenv
,这对我没有帮助 :)
有没有人知道我该如何在virtualenv
下编译mod_wsgi?
3 个回答
你需要用 -fPIC
选项重新编译 libpython2.6.a
,这样才能生成目标文件。
比如:
gcc -fPIC -g -c -Wall xxx.c
如果你是从源代码编译Python的,记得在配置的时候加上--enable-shared这个选项。这个选项会让编译过程中加上-fPIC这个参数。
相关文档的内容如下:
这里提到了-fPIC的问题。
还有:
这里提到当mod_wsgi找不到共享库时,需要使用LD_RUN_PATH。
关于共享库的问题,以及mod_wsgi找错Python安装的更多信息,可以在这里找到: