php7在FreeBSD靜態編譯iconv,導致BUS ERROR (core dump)解決
知識
10-19
bug頁面: https://bugs.php.net/bug.php?id=72198
觸發此bug需要很多條件:
- FreeBSD系統(10.0以上),Linux系統、MacOS下均無此問題
- 靜態編譯iconv擴展,動態iconv擴展也無此問題
- 系統安裝了libiconv庫(根據php bugs報告頁面)
- 必須是直接運行在硬體之上的FreeBSD系統(虛擬機下的FreeBSD系統也沒有重現出此問題)
這個問題,從2016年出現,到現在依然沒有人修復,因為這個bus error需要觸發的條件很多,所以官方開發iconv擴展的人應該很難重現這樣的bug,導致遲遲無法修復。
我的解決方案是,編譯php7.0以上的時候去掉iconv擴展,但很不幸,必須得同時去掉gd擴展,因為gd擴展需要iconv擴展才能運行。 所以編譯的時候添加參數:
--without-iconv
iconv默認是打開的,gd不是,所以編譯選項去掉 --with-gd 就可以正常編譯了。
編譯完成後,安裝系統的php72-gd、php72-iconv擴展,
pkg install php72-g php72-iconv
將目錄 /usr/local/lib/php/20170718 內的gd.so和iconv.so拷貝到安裝php的路徑 php.ini里打開這兩個擴展即可:
extension=iconv.so
extension=gd.so
※最新Docker的安裝與使用以及常見問題 Linux Windows
※jsx遇到template-directive
TAG:程序員小新人學習 |