openssl1.0在mac下的編譯安裝(踩坑精華原創)

踩坑回顧:

因爲不當心在mac作了一下brew版本升級,而後用pip3安裝一個第三方lib就報錯了(涉及到openssl庫):python

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.dylibgit

根據提示,應該是缺乏了openssl1.0.0的兩個庫:github

libcrypto.1.0.0.dylibvim

libssl.1.0.0.dylibbash

 

個人macOS版本:10.15.6 (19G2021)  網絡

那如何在mac上安裝openssl1.0.0呢,網上大多數文章都是推薦使用brew直接安裝openssl,但實際上沒法安裝成功,在這裏我給你們分別介紹網上的安裝方法和我本地編譯安裝的方法。ide

 

1. brew安裝

用brew安裝openssl1.0.0(我試了下,按照這種方式,網絡不通,沒法安裝)測試

#卸載老版本opensslbrew uninstall --ignore-dependencies openssl#brew一鍵安裝brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

能fq的盆友能夠試試以上操做,不能***的仍是老老實實編譯一個openssl的版本。spa

下面給你們介紹一個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.bztar xzvf perl-5.16.3.tar.bzcd perl-5.16.3./configure.gnumakesudo make install

 

2.3 查看perl是否被正常安裝

執行:perl -v, 顯示對於版本爲5.16.4,安裝OK了。

 

3. 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/libcp 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版本,前先後後遇到了五六個坑,我花了近一天的時間才搞定,若是本文解決了你的問題,辛苦幫忙順手點個贊,讓更多人省下踩坑的時間,多陪陪家人~

 

博主:測試生財

座右銘:專一測試與自動化,致力提升研發效能;經過測試精進完成原始積累,經過讀書理財奔向財務自由。

51cto:https://blog.51cto.com/14900374

相關文章
相關標籤/搜索