【问题标题】:Strange Python compilation results with "--enable-shared" flag带有“--enable-shared”标志的奇怪 Python 编译结果
【发布时间】:2014-03-03 20:52:07
【问题描述】:

我正在使用 Debian(Python-2.7.3 附带),尝试从源代码编译 Python-2.7.6,以便与 mod_wsgi 和 Apache 一起使用。

根据许多答案,显然您必须在编译 mod_wsgi 使用时使用 --enable-shared。

按照以下步骤操作:

./configure --enable-shared --prefix=/usr/local/bin/python-2.7.6
make
make install

然后检查交互式shell @

/usr/local/bin/python-2.7.6/bin/python

我收到了“Python 2.7.3(默认,2013 年 1 月 2 日,14:09:21)”等的问候

为什么会导致 Python 2.7.3?

我对可执行文件尝试了 ldd,结果如下:

linux-vdso.so.1 =>  (0x00007fff271ff000)
libpython2.7.so.1.0 => /usr/lib/libpython2.7.so.1.0 (0x00007f1545638000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f154541c000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f1545217000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f1545014000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1544d92000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1544a06000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f15447ef000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f15445d9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1545b40000)

如何阻止它使用系统库而使用本地编译的版本?

我知道恢复使用系统安装的 Python 版本要容易得多,而且现实世界的差异为零。但这种行为似乎很奇怪。

【问题讨论】:

    标签: python-2.7 gcc compilation debian mod-wsgi


    【解决方案1】:

    当你做 Python 的 make 时,运行它:

    LD_RUN_PATH=/usr/local/lib make
    

    设置环境变量 LD_RUN_PATH 会强制生成的“python”可执行文件在 /usr/lib 之前的 /usr/local/lib 中查找 Python 共享库。

    这在 mod_wsgi 文档中有所提及。

    再次执行此操作之前,请确保执行“make distclean”并重新运行配置以确保您没有旧的构建产品。

    【讨论】:

    • 我最终要做的是:使用 --enable-shared 编译一次 python,将安装到目录中,进行 distclean 它,将 LD_RUN_PATH 设置为新编译的 lib 文件夹,再次使用 - -enable-shared,去掉之前编译的版本,make install。再次针对新的 python 重新编译 mod_wsgi。非常感谢指向正确方向的指针。
    • 随机注意:您实际上可以添加一个 RPATH 后编译,使用一个名为 patchelf 的漂亮简单的程序。这对我来说是最近的新闻,因为我忘记设置 RPATH/RUN_PATH 使我免于重新编译某些东西。强烈推荐:nixos.org/patchelf.html
    • 很高兴了解 patchelf。早在 90 年代初,我就曾在 Solaris 上使用过类似的程序。不知道 Linux 有这样的东西。
    猜你喜欢
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 2023-03-19
    相关资源
    最近更新 更多