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

use*_*654 5 python ssl openssl pyopenssl

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

./config
sudo make
sudo make install
Run Code Online (Sandbox Code Playgroud)

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

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

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

./configure
make
make install
Run Code Online (Sandbox Code Playgroud)

执行后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
Run Code Online (Sandbox Code Playgroud)

我不知道问题出在哪里,我需要做什么。

Cri*_*ati 7

这与(应该)与PythonOpenSSL版本无关。

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

当加载一个.so时,加载器必须(递归地)找到该.so需要(依赖)的所有.so文件,否则将无法加载它。

Python有一些依赖于OpenSSL lib的模块(例如_ssl*.so_hashlib*.so ) 。由于您是根据OpenSSL 1.1.1构建的(名称与系统上默认的名称不同:通常为1.0.*),因此加载程序将无法使用默认名称。

您需要做的是指示加载程序(检查[Man7]: LD.SO(8)了解更多详细信息)在哪里查找“您的” OpenSSL lib(位于/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
Run Code Online (Sandbox Code Playgroud)

您可能还想查看[Python.Docs]:配置 Python - 库选项--with-openssl--with-openssl-rpath)。

值得一读(可能):


小智 -1

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