我需要在 Ubuntu 16.04 中尝试使用 python 3.7 和 openssl-1.1.1。 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
我无法弄清楚问题是什么以及我需要做什么。
最佳答案
这(应该)与 Python 或 OpenSSL 版本无关。
Python 构建过程,包括启动新构建的解释器时的一些步骤,并尝试加载一些新构建的模块 - 包括扩展模块(已编写在 C 中并且实际上是共享对象 (.sos))。
当一个 .so 被加载时,加载器必须(递归地)找到 .so 需要的所有 .so 文件(取决于on),否则无法加载。
Python 有一些依赖于 OpenSSL 的模块(例如 _ssl*.so、_hashlib*.so) > 库。由于您是针对 OpenSSL1.1.1 构建的(lib 名称不同于系统默认的名称:通常是 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
您可能还想看看 [Python.Docs]: Configure Python - Libraries options (--with-openssl,--with-openssl-rpath)。
值得一读(大概):
关于python - ./python : error while loading shared libraries: libssl. so.1.1: 无法打开共享对象文件: 没有这样的文件或目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50246699/