php7在FreeBSD系統下靜態編譯iconv,致使BUS ERROR (core dump)解決

bug頁面: https://bugs.php.net/bug.php?id=72198
觸發此bug須要不少條件:php

  1. FreeBSD系統(10.0以上),Linux系統、MacOS下均無此問題
  2. 靜態編譯iconv擴展,動態iconv擴展也無此問題
  3. 系統安裝了libiconv庫(根據php bugs報告頁面)
  4. 必須是直接運行在硬件之上的FreeBSD系統(虛擬機下的FreeBSD系統也沒有重現出此問題)

這個問題,從2016年出現,到如今依然沒有人修復,由於這個bus error須要觸發的條件不少,因此官方開發iconv擴展的人應該很難重現這樣的bug,致使遲遲沒法修復。php7

個人解決方案是,編譯php7.0以上的時候去掉iconv擴展,但很不幸,必須得同時去掉gd擴展,由於gd擴展須要iconv擴展才能運行。 因此編譯的時候添加參數:.net

--without-iconv

iconv默認是打開的,gd不是,因此編譯選項去掉 --with-gd 就能夠正常編譯了。code

編譯完成後,安裝系統的php72-gd、php72-iconv擴展,開發

pkg install php72-gd php72-iconv

將目錄 /usr/local/lib/php/20170718 內的gd.so和iconv.so拷貝到安裝php的路徑 php.ini裏打開這兩個擴展便可:get

extension=iconv.so
extension=gd.so
相關文章
相關標籤/搜索