ssl ./python:加载共享库时出错:库文件1.1:无法打开共享目标文件:无此文件或目录

k4emjkb1  于 2023-02-23  发布在  Python
关注(0)|答案(3)|浏览(165)

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

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

kb5ga3dv

kb5ga3dv1#

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

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

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

  • Python* 有一些依赖于 OpenSSL**libs的模块(例如 _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]:配置Python -库选项(--使用openssl --使用openssl-rpath)。
查看[SO]: How to enable FIPS mode for libcrypto and libssl packaged with Python? (@CristiFati's answer),了解与您的问题(远程)相关的更广泛问题的详细信息。

0s0u357o

0s0u357o2#

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

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

gstyhher

gstyhher3#

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

相关问题