【问题标题】:./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory./python:加载共享库时出错:libssl.so.1.1:无法打开共享对象文件:没有这样的文件或目录
【发布时间】:2018-10-19 04:16:13
【问题描述】:

我需要在 Ubuntu 16.04 中尝试使用带有 openssl-1.1.1 的 python 3.7。 python 和 openssl 版本都是预发布的。按照a previous post 中有关如何将openssl 统计链接到python 的说明,我下载了opnssl-1.1.1 的源代码。 然后导航到 openssl 的源代码并执行:

./config
sudo make
sudo make install

然后,编辑 Modules/Setup.dist 以取消注释以下行:

SSL=/usr/local/ssl
_ssl _ssl.c \
    -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
    -L$(SSL)/lib -lssl -lcrypto

然后下载python 3.7源代码。然后,在源代码中导航并执行:

./configure
make
make install

在我执行make install之后,在终端输出的末尾出现了这个错误:

./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
generate-posix-vars failed
Makefile:596: recipe for target 'pybuilddir.txt' failed
make: *** [pybuilddir.txt] Error 1

我无法弄清楚问题出在哪里以及我需要做什么。

【问题讨论】:

  • 您也忘记取消注释 _socket socketmodule.c 但这不能解决您的问题 AFAIK
  • 你的 SSL 库——如果它们在/usr/local/lib 中(默认位置,如果你在编译时没有将任何其他参数传递给./config),请确保该位置在你的@987654333 中@,并且您已经运行 ldconfig 来更新缓存跟踪共享库位置。
  • 除此之外,检查ldd 的输出以找出无法加载可执行文件的原因也很有帮助。

标签: python ssl openssl pyopenssl


【解决方案1】:

使用 Python-3.6.5 和 openssl-1.1.0h 我遇到了同样的问题。我已取消注释 _socket socketmodule.c。

【讨论】:

    【解决方案2】:

    这(应该)与 Python 或 OpenSSL 版本无关。

    Python 构建过程,包括新构建的解释器启动时的一些步骤,并尝试加载一些新构建的模块 - 包括 extension 模块(编写在 C 中,实际上是 共享对象 (.sos))。

    当一个 .so 被加载时,加载器必须(递归地)找到 .so 需要的所有 .so 文件(取决于on),否则无法加载。

    Python 有一些依赖于OpenSSL 的模块(例如_ssl*.so、_hashlib*.so) > libs。由于您是针对 OpenSSL1.1.1 构建的(lib 名称与系统默认的名称不同:通常 1.0.*),加载器将无法使用默认的。

    您需要做的是指示加载程序在哪里寻找“您的”OpenSSL libs(位于 /usr/local/ ssl/lib)。一种方法是在 ${LD_LIBRARY_PATH} env var 中添加它们的路径(在构建 Python 之前):

    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/ssl/lib
    ./configure
    make
    make install
    

    查看[SO]: How to enable FIPS mode for libcrypto and libssl packaged with Python? (@CristiFati's answer),了解与您的远程相关的更广泛问题的详细信息。

    【讨论】:

      【解决方案3】:

      我做了什么来解决这个问题:

      ./configure --with-ssl=./libssl --prefix=/subsystem
      sed -i 's!^RUNSHARED=!RUNSHARED=LD_LIBRARY_PATH=/path/to/own/libssl/lib!' Makefile
      make
      make install
      

      使用导出设置 LD_LIBRARY_PATH 是不够的

      【讨论】:

        猜你喜欢
        • 2022-07-22
        • 1970-01-01
        • 2022-06-15
        • 2015-06-07
        • 2019-02-16
        • 2015-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多