在虚拟环境中编译mod_wsgi的问题

6 投票
3 回答
4317 浏览
提问于 2025-04-16 18:16

我在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 个回答

1

你需要用 -fPIC 选项重新编译 libpython2.6.a,这样才能生成目标文件。

比如:

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

如果你是从源代码编译Python的,记得在配置的时候加上--enable-shared这个选项。这个选项会让编译过程中加上-fPIC这个参数。

8

相关文档的内容如下:

http://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html#mixing-32-bit-and-64-bit-packages

这里提到了-fPIC的问题。

还有:

http://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html#unable-to-find-python-shared-library

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

关于共享库的问题,以及mod_wsgi找错Python安装的更多信息,可以在这里找到:

http://modwsgi.readthedocs.io/en/develop/user-guides/checking-your-installation.html#python-shared-library

撰写回答