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的盆友可以試試以上操作,不能翻牆的還是老老實實編譯一個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
為了編譯這個版本,前前後後遇到了五六個坑,我近花了一天的時間才搞定,如果本文解決了你遇到的問題,幫忙順手點個贊,讓更多人省下踩坑的時間,多陪陪家人~
部落客:測試生財
座右銘:專註測試與自動化,致力提高研發效能;通過測試精進完成原始積累,通過讀書理財奔向財務自由。
csdn://blog.csdn.net/ccgshigao