openssl1.0在mac下的编译安装(踩坑精华)
之前做了一次brew版本升级,然后用pip3安装的一个python命令就无法执行了(涉及到openssl库),执行就会报一个错误。
ImportError: dlopen(/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload/_ssl.cpython-36m-darwin.so, 2): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
根据提示,缺少了openssl1.0.0的两个库:
libcrypto.1.0.0.dylib
libssl.1.0.0.dylib
如何在mac上安装openssl1.0呢,网上大多数都是使用brew直接安装openssl,但实际上无法安装成功,在这里我给大家分别介绍网上的安装方法和我本地编译安装的方法。
我的macOS版本:10.15.6 (19G2021)
1. brew安装
用brew安装openssl1.0.0(我试了下,按照网上的方式,网络不通,无法安装)
#卸载老版本openssl brew uninstall --ignore-dependencies openssl #brew一键安装 brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb
能fq的盆友可以试试以上操作,不能FQ的还是老老实实编译一个openssl的版本。
下面给大家介绍一个openssl1.0源码编译的安装方式。
2. perl5.15安装
2.1 报错
安装openssl1.0之前,必须安装perl5.16,否则在执行make install时候会报错,pod2man的错误:
cms.pod around line 457: Expected text after =item, not a number
cms.pod around line 461: Expected text after =item, not a number
cms.pod around line 465: Expected text after =item, not a number
cms.pod around line 470: Expected text after =item, not a number
cms.pod around line 474: Expected text after =item, not a number
POD document had syntax errors at /usr/bin/pod2man line 69.
网上给的做法是直接rm -f /usr/bin/pod2man,实际上这么是无法操作的,也是不推荐的(破坏了系统),我们采取更加温和的方式来解决问题。
2.2 安装perl5.16
依次执行如下命令:
wget https://cpan.metacpan.org/authors/id/R/RJ/RJBS/perl-5.16.3.tar.bz tar xzvf perl-5.16.3.tar.bz cd perl-5.16.3 ./configure.gnu make sudo make install
2.3 查看perl是否被正常安装
执行:perl -v, 显示对于版本为5.16.4
3. openssl1.0安装
3.1 下载openssl1.0.0
3.2 解压openssl压缩包
tar xzvf openssl-1.0.0.tar.gz
3.3 进入对于目录
cd openssl-1.0.0
3.4 编译支持的系统查看
1)查看操作系统信息uname -a
2)我们选择darwin64-x86_64-cc(64位的mac系统)
./Configure LIST | grep darwin
3.5 配置config文件
配置生成静态库这里非常关键点:因为我们缺少的是动态库,所以要加上no-asm,默认会生成shared库(动态),如果加上no-shared,就不会生成动态库
./Configure darwin64-x86_64-cc --prefix=/usr/local/opt/openssl no-asm --openssldir=/usr/local/ssl
这里要注意的是openssl1.0.x版本中配置动态库的参数各有不同,有的需要加上-shared生成动态库,有的不需要。可以参考./Configure -h查看下。
下图中所示openssl1.0.0就不加参数,默认生成动态库,如果加上了no-shared就不会生成动态库
3.6 生成MakeFile
1) 输入:./config
这里面看到一个提示,意思是说如果是Mac64位系统,需要重新手动执行:
./Configure darwin64-x86_64-cc
这里网上说的是设置环境变量(export KERNEL_BITS=64),但是实际上是没用的。
2) 查看Makefile,里面的配置是i386的动态链接库(32位)
3)重新配置Makefile
./Configure darwin64-x86_64-cc --prefix=/usr/local/opt/openssl no-asm --openssldir=/usr/local/ssl
这时候Makefile就会变成x86_64的配置了
3.7 编译Openssl
sudo make
3.8 安装openssl
1) 全局安装openssl,输入:
sudo make install
2) 生成动态链接库
这里很奇怪,不知道为啥没有生成动态链接库。所以只能手动在命令行下执行:
/Library/Developer/CommandLineTools/usr/bin/make libcrypto.1.0.0.dylib /Library/Developer/CommandLineTools/usr/bin/make libssl.1.0.0.dylib
3)拷贝openssl1.0.0的动态链接库到对应目录
cp libcrypto.1.0.0.dylib libcrypto.dylib libssl.1.0.0.dylib libssl.dylib /usr/local/ssl/lib
cp libcrypto.1.0.0.dylib libcrypto.dylib libssl.1.0.0.dylib libssl.dylib /usr/local/opt/openssl/lib
4)重新生成软连接
分别在以上两个目录(/usr/local/ssl/lib和 /usr/local/opt/openssl/lib)进行如下操作:
#1.这里删除之前的软链接,可能指向是别的版本的openssl rm -rf libssl.dylib libcrypto.dylib #2.生成软连接 sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib sudo ln -s libssl.1.0.0.dylib libssl.dylib
如下图,就算ok了
3.9 修改默认openssl
1)检查openssl版本
输入:openssl version
可以看到mac用的是默认是LibreSSL,需要修改下PATH
2)修改默认openssl
#我用的是zsh,如果你用的是bash,请vim ~/.bashrc)
输入:sudo vim ~/zshrc, 配置如下内容
export PATH="/usr/local/ssl/bin:$PATH"
3)重新加载环境变量
. ~/.zshrc
4)再输入openssl version
显示即为编译安装的版本1.0.0
为了编译这个版本,前前后后遇到了五六个坑,我近花了一天的时间才搞定,如果本文解决了你遇到的问题,帮忙顺手点个赞,让更多人省下踩坑的时间,多陪陪家人~
博主:测试生财(一个不为996而996的测开码农)
座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。
内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。
csdn:https://blog.csdn.net/ccgshigao
博客园:https://www.cnblogs.com/qa-freeroad/
51cto:https://blog.51cto.com/14900374
微信公众号:测试生财(定期分享独家内容和资源)