【问题标题】:how do I get python to compile with libz?如何让 python 与 libz 一起编译?
【发布时间】:2012-03-19 03:34:10
【问题描述】:

我刚刚从源码编译的python 3.3的版本:

$ ldd ./python
    linux-gate.so.1 =>  (0xb776c000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb773b000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7736000)
    libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0xb7731000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb7707000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb7589000)
    /lib/ld-linux.so.2 (0xb776d000)

与我的python3(3.2)系统版本相比:

$ ldd `which python3`
    linux-gate.so.1 =>  (0xb7777000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb7746000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb7741000)
    libutil.so.1 => /lib/i386-linux-gnu/libutil.so.1 (0xb773c000)
    libssl.so.1.0.0 => /lib/i386-linux-gnu/libssl.so.1.0.0 (0xb76ef000)
    libcrypto.so.1.0.0 => /lib/i386-linux-gnu/libcrypto.so.1.0.0 (0xb754b000)
    libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xb7536000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb750c000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb738d000)
    /lib/ld-linux.so.2 (0xb7778000)

由于某种原因,libz 和其他一些库丢失了。我尝试了解决方案here,但没有奏效。我很难过 - 有什么想法吗?

【问题讨论】:

  • 为什么你认为二进制文件需要与 zlib 链接?
  • 我正在编写的 cython 模块遇到问题,因为缺少 libz。

标签: python makefile python-3.3


【解决方案1】:

看起来答案在 Modules/Setup(和 Modules/Setup.dist)中。取消注释 358 行成功了:

# Andrew Kuchling's zlib module.
# This require zlib 1.1.3 (or later).
# See http://www.gzip.org/zlib/
zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

【讨论】:

    【解决方案2】:

    尝试使用 --with-libs。见下文。

    Python-3.3.0a1/configure --help | grep lib 
    .... 
    --with-libs='lib1 ...'  link against additional libs
    ....
    

    使用 --with-libs='libz' 配置后,我在 config.log 中看到“--with-system-zlib”。这应该是您正在寻找的。​​p>

    【讨论】:

    • 嗯。该选项适用于./configure,但现在我无法制作。我收到 #error "此平台的 pyconfig.h 需要定义 PY_FORMAT_LONG_LONG"
    • 在 config.log 我看到类似gcc: error: libz: No such file or directory的错误
    【解决方案3】:

    只需确保在运行 configmake 之前安装所需的库,例如:

    yum install sqlite-devel
    yum install zlib-devel
    yum install openssl-devel
    
    ./configure --enable-shared
    make install
    

    如果您忘记了第一次,没关系,请再试一次。如果您以后要构建其他依赖 Python 的程序(例如 mod_wsgi,Django 需要),最好使用 --enable-shared

    如果在运行 Python 时看到“python3: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory”,解决方法之一是简单地这样做:

    cp /usr/local/lib/libpython3.5m.so.1.0 /usr/lib64/
    

    否则将其添加到 LD_LIBRARY_PATH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-25
      • 2013-04-13
      相关资源
      最近更新 更多