1. 程式人生 > 實用技巧 >PHP提示dyld: Library not loaded問題解決

PHP提示dyld: Library not loaded問題解決

Mac在命令列執行php命令時,如php -v 有錯誤提示:

dyld: Library not loaded: /usr/local/opt/openssl/lib/libcrypto.1.0..dylib
Referenced from: /usr/local/bin/php
Reason: image not found

表面看是缺少了libcrypto.1.0.0檔案,mac自帶的openssl是0.9.8,可以命令列檢視下:

/usr/bin/openssl version

OpenSSL 0.9.8zh  Jan 

之前已經使用brew安裝了最新的openssl,版本1.1.1g。brew預設安裝目錄是沒有openssl的目錄,都是使用

[email protected]這樣的目錄,使用命令

brew switch openssl 1.1

建立openssl目錄,使用的是切換後的版本1.1,由於是1.1版本,沒有1.0,使用軟鏈 ln -s 建立檔案連結到1.1。

照理說這樣是可行的,但依然會提示錯誤:

dyld: Symbol not found: _SSL_library_init

查閱資料,openssl1.1跟1.0變化比較大。這種變化導致部分使用的1.0版本的軟體無法相容1.1,最新版本的php可能有解決此問題,這個我就沒有去試驗,我使用的是7.1.33版本。

以上載圖來自:https://wiki.openssl.org/index.php/OpenSSL_1.1.0_Changes

這樣就不能使用1.1版本了,brew當前已經去除了openssl1.0的支援,只有1.1版本,mac版本又太低,這個時候只能選擇自己編譯安裝。

下載地址:https://www.openssl.org/source/old/1.0.2/

選擇一個版本下載到本地,開始安裝:

./Configure darwin64-x86_64-cc shared --prefix=/usr/local/  

記得要加上shared,幾乎網上資料都沒有說明這點,導致安裝多次都沒有成功。只有加shared引數才會生成dylib檔案。

make
sudo make install

在/usr/local/目錄下安裝需要管理員許可權,所以要加上sudo,也可以選擇另外的目錄,將include, lib和bin等目錄安裝在同一個目錄,後面再另外指定就可以。

安裝完成後,預設的openssl已經是最新安裝的版本了。

which openssl

/usr/local/bin/openssl

到這一步還沒完成,PHP的openssl依賴也需要一併調整。

使用命令檢視PHP當前依賴:

otool -L /usr/local/bin/php

修改libcrypto和libssl的路徑:

install_name_tool -change /usr/local/opt/openssl/lib/libcrypto.1.1.dylib /usr/local/lib/libcrypto.1.0..dylib /usr/local/bin/php

install_name_tool -change /usr/local/opt/openssl/lib/libssl.1.1.dylib /usr/local/lib/libssl.1.0..dylib /usr/local/bin/php

這樣,問題解決。