前言
由於之前升級MAC導致我原來安裝的PHP 7.1
版本出現一系列問題:
之前就看網友經常勸說“不要升級MAC版本”,也是因為升級後會導致各種各樣的問題。而我的同事也中招了,升級完了MAC版本之後原來的PHP直接不可用了。而我升級完之後以為很慶幸沒出任何問題,但是最終在執行cli的時候發現問題了。
如果大家也有相似的經驗,歡迎一起討論哈!
1、每次執行php-cli都需要等待5s
先,然後才會執行。
2、對原來的安裝包重新執行編譯,開始報一大堆錯誤。
終於對升級後的PHP版本忍無可忍了,於是準備參考社群的PHP 核心與原生擴充套件開發 內容重新編譯一次。
過程
1、下載資源包 https://learnku.com/docs/php-internals/php7/building_extensions/6849
2、執行 rm configure && ./buildconf --force
3、執行./configure
,報錯:configure: error: bison 3.0.0 or later is required to generate PHP parsers (excluded versions: none).
,文中有些關於bison:
bison,用於生成 PHP 解析器。
2.4 或更高版本(對於 PHP 7.0-7.3)
3.0 或更高版本(對於 PHP 7.4)
也就是說我目前安裝的php版本太高了,依賴於bison的3.0版本,可是mac又限制我不讓我修改。於是只能安裝7.0-7.3版本好了。
4、git checkout PHP-7.0 && rm configure && ./buildconf --force
終於編譯成功了,繼續下一步。
5、執行make
,然後又報錯如:make: *** [sapi/cli/php] Error 1
。根據錯誤解決方案的過程終於解決了。竟然問題解決了,我似乎就沒有重新編譯安裝的需求了!哈哈~
6、執行make test
成功
7、執行sudo make install
錯誤解決方案
1、configure: error: bison 3.0.0 or later is required to generate PHP parsers (excluded versions: none).
刪除原來的版本並下載最新的版本brew remove bison && brew install bison
,然後執行./configure
依然報錯。於是sudo rm -f /usr/bin/bison
提示無法刪除系統檔案。吐血!!升級完了mac之後真是各種問題…
2、make: *** [sapi/cli/php] Error 1
安裝brew install libiconv
,安裝完了之後重新make問題依然復現。但是卻把我原來升級完mac導致php-cli執行都需要等待5s的問題解決了。然而目前這個問題還是沒解決,怎麼辦呢? 網上查詢liconv
相關的問題得到:
連結出現 /usr/bin/ld: cannot find -liconv。
-liconv 是一個連結選項,在 gcc 編譯後 由 ld 進行連結。對於動態連結,連結庫名字總是將 -l 換成 lib、再後面加上 .so。所以也就是 libiconv.so,而不是 libliconv.so。
一般而言 連結選項與庫名一致。搜尋得到 -liconv 對應的動態庫 稱為 iconv。
那麼能不能找到libiconv.so
呢?最後libiconv.so
沒找到,不過受到啟發後的我嘗試找找其他的檔案如最後找到的:/usr/local/opt/libiconv/lib/libiconv.dylib
,然後將Makefile
中的-iconv
替換成了/usr/local/opt/libiconv/lib/libiconv.dylib
,再重新執行make
問題終於解決了!這種思路也可以解決一些類似openssl的報錯。
本作品採用《CC 協議》,轉載必須註明作者和本文連結