前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >openssl1.0在mac下的编译安装(踩坑精华原创)

openssl1.0在mac下的编译安装(踩坑精华原创)

作者头像
小仙女闯运维
发布2020-09-23 16:23:05
4.4K0
发布2020-09-23 16:23:05
举报
文章被收录于专栏:小仙女技术栈

踩坑回顾: 由于不小心在mac做了一下brew版本升级,然后用pip3安装一个第三方lib就报错了(涉及到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

我的macOS版本:10.15.6 (19G2021)

那如何在mac上安装openssl1.0.0呢,网上大多数文章都是推荐使用brew直接安装openssl,但实际上无法安装成功,在这里我给大家分别介绍网上的安装方法和我本地编译安装的方法。

  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 能访问国外网站的盆友可以试试以上操作,不能访问国外网站的还是老老实实编译一个openssl的版本。

下面给大家介绍一个openssl1.0源码编译的安装方式。

  1. 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.bztar xzvf perl-5.16.3.tar.bz cd perl-5.16.3./configure.gnumakesudo make install

2.3 查看perl是否被正常安装 执行:perl -v, 显示对于版本为5.16.4,安装OK了。

  1. openssl1.0.0安装 3.1 下载openssl1.0.0

wget https://www.openssl.org/source/old/1.0.0/openssl-1.0.0.tar.gz

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.这里删除之前的软链接,可能指向是别的版本的opensslrm -rf libssl.dylib libcrypto.dylib

2.生成软连接sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylibsudo 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

当前使用的openssl对应的版本为1.0.0,算是大功告成了。

后话:为了编译这个openssl1.0.0版本,前前后后遇到了五六个坑,我花了近一天的时间才搞定,如果本文解决了你的问题,辛苦帮忙顺手点个赞,让更多人省下踩坑的时间,多陪陪家人~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 卸载老版本openssl
  • brew一键安装
  • 1.这里删除之前的软链接,可能指向是别的版本的opensslrm -rf libssl.dylib libcrypto.dylib
  • 2.生成软连接sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylibsudo ln -s libssl.1.0.0.dylib libssl.dylib
  • 我用的是zsh,如果你用的是bash,请vim ~/.bashrc)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档