在 64 位元的 Red Hat Enterprise Linux AS 4.7 系統上編譯 PHP 5.2.6 時,若 MySQL 是透過 RPM 方式安裝,執行 ./configure 可能會出現以下錯誤:
checking for specified location of the MySQL UNIX socket... no checking for MySQL UNIX socket location... no configure: error: Cannot find libmysqlclient under /usr. Note that the MySQL client library is not bundled anymore!
錯誤原因在於 64 位元系統下 MySQL 的客戶端庫文件 libmysqlclient.so 位於 /usr/lib64/mysql/ 目錄,而 PHP 編譯腳本預設只會搜尋 /usr/lib/,導致找不到庫文件。
將 64 位元庫文件連結到 32 位元預設搜尋路徑:
cp -rp /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
或建立軟連結:
ln -s /usr/lib64/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
更標準的做法是安裝 mysql-devel,並單獨編譯 mysqli 擴展:
# 進入 PHP 源碼的 mysqli 擴展目錄 cd /usr/local/src/php-xxxxx/ext/mysqli # 安裝 MySQL 開發庫 yum -y install mysql-devel # 使用 phpize 準備編譯環境 /phpize # 配置編譯選項(請根據實際路徑調整 php-config 路徑) ./configure --with-php-config=/usr/local/php/bin/php-config --enable-embedded-mysqli=shared --enable-shared # 編譯並安裝 make make install
編譯成功後,螢幕會顯示生成的 mysqli.so 路徑,將其加入 php.ini 中的 extension 指令即可載入。
同樣的庫路徑問題也可能出現在其他庫上,例如 libjpeg:
/usr/lib/libjpeg.so -> /usr/lib64/libjpeg.so
解決思路相同:確保 32 位元兼容路徑下存在對應的庫文件或軟連結。
64 位元 Linux 系統編譯 PHP 時遇到 Cannot find libmysqlclient 錯誤,核心在於庫文件路徑不匹配。建議優先採用方法二,安裝 mysql-devel 並重新編譯 mysqli 擴展,這樣更符合系統包管理規範,也能避免後續升級帶來的連結失效問題。