./python:加载共享库时出错:libssl.so.1.1:无法打开共享对象文件:没有这样的文件或目录

时间:2018-05-09 06:19:31

标签: python ssl openssl pyopenssl

我需要在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

我无法弄清楚问题是什么以及我需要做什么。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

当加载 .so 时,加载程序必须(递归地)找到 .so 所需的所有 .so 文件(取决于) on),否则将无法加载它。

Python 有一些依赖于 OpenSSL _ssl * .so _hashlib * .so ) > libs。由于您针对 OpenSSL 1.1.1 构建了自己的(lib名称与系统默认的名称不同:通常 1.0。* ),加载器将无法使用默认值。

您需要做的是,指示加载器在哪里查找“您的” OpenSSL 库(位于 / 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),了解与您的远程相关的更广泛问题的详细信息。

答案 2 :(得分:0)

我已经采取了哪些措施来解决这个问题:

./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是不够的!