【问题标题】:Apache FastCGI Python Linking ErrorApache FastCGI Python 链接错误
【发布时间】:2014-03-11 17:43:00
【问题描述】:

我正在处理的一个 FastCGI Web 服务目前由于以下错误而损坏:

ImportError: /proj/issm-web/trunk/lib/IssmConfig.so: undefined symbol: PyUnicodeUCS2_FromString

此错误的原因是我使用的 Python 安装与系统范围安装不同。显然,当我重新启动 Apache2 服务器时,选择了错误的库!

为了解决这个问题,我尝试修改:

/etc/apache2/envvars

我在这个文件中附加了以下内容:

 export LD_LIBRARY_PATH="/proj/issm-web/trunk/externalpackages/python/install/lib:${LD_LIBRARY_PATH}"
 ldd `which python` >> ${TEST_FILE}

这给出了令人满意的结果:

linux-vdso.so.1 =>  (0x00007ffff25ff000)
libpython2.7.so.1.0 => /proj/issm-web/trunk/externalpackages/python/install/lib/libpython2.7.so.1.0 (0x00007f236db18000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f236d8db000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f236d51b000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f236d317000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f236d114000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f236ce17000)
/lib64/ld-linux-x86-64.so.2 (0x00007f236def2000)

换句话说,不仅是启动了正确的 Python 可执行文件,而且还选择了正确的库!

此外,我可以确认:

/proj/issm-web/trunk/externalpackages/python/install/lib/libpython2.7.so.1.0

包含适当的符号:

readelf -s $ISSM_DIR/externalpackages/python/install/lib/libpython2.7.so.1.0 | grep'PyUnicodeUCS2_FromString'
316: 00000000000bd0e0   312 FUNC    GLOBAL DEFAULT   11 PyUnicodeUCS2_FromStringA
606: 00000000000bd220    58 FUNC    GLOBAL DEFAULT   11 PyUnicodeUCS2_FromString
4036: 00000000000bd0e0   312 FUNC    GLOBAL DEFAULT   11 PyUnicodeUCS2_FromStringA
4241: 00000000000bd220    58 FUNC    GLOBAL DEFAULT   11 PyUnicodeUCS2_FromString

不幸的是,我仍然看到同样的错误。我唯一能想到的是,当我重新启动 Apache 时,我设置的环境变量没有得到尊重。

以下是一些可能有用的信息:

apache2 -version
Server version: Apache/2.2.22 (Ubuntu)
Server built:   Jul 12 2013 13:37:10

uname -a
Linux thwaites 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

谁能帮我解决这个问题?

【问题讨论】:

    标签: python apache fastcgi ld


    【解决方案1】:

    问题最终在于如何启动 FastCGIServer。不幸的是,默认情况下,环境变量不会从 Apache 传播。

    为了将 LD_LIBRARY_PATH 传递给 FastCGIServer,我必须进行修改

     /etc/apache2/sites-available/default
    

    包括:

     -initial-env LD_LIBRARY_PATH
    

    启动 FastCGIServer 时。

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多