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)
我不知道问题出在哪里,我需要做什么。
这与(应该)与Python或OpenSSL版本无关。
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之前):
Run Code Online (Sandbox Code Playgroud)export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/ssl/lib ./configure make make install
您可能还想查看[Python.Docs]:配置 Python - 库选项(--with-openssl、--with-openssl-rpath)。
值得一读(可能):
| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |