在 64 位元系統編譯 PHP 時,若連結器找到 32 位元的 MySQL 客戶端庫,會報錯:
/usr/bin/ld: skipping incompatible /usr/lib/mysql/libmysqlclient.so when searching for -lmysqlclient
PHP 編譯過程預設搜尋 /usr/lib/mysql(32 位元庫),但系統為 64 位元,需使用 /usr/lib64/mysql 下的 64 位元庫。
mv /usr/lib/mysql /usr/lib/mysql.32bit.bak
ln -s /usr/lib64/mysql /usr/lib/mysql
./configure 並編譯 PHP。./configure --with-mysql=/usr/lib64/mysql ...
或設定環境變數:
export LDFLAGS="-L/usr/lib64/mysql"
export CPPFLAGS="-I/usr/include/mysql"
./configure --with-mysql ...
ldd /usr/local/php/bin/php | grep mysql
# 應顯示 libmysqlclient.so => /usr/lib64/mysql/libmysqlclient.so
libxml2、openssl、curl 等依賴庫同樣需確認 64 位元版本已安裝(yum install libxml2-devel.x86_64 等)。mysqlnd (MySQL Native Driver) 取代 libmysqlclient,編譯參數 --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd,完全避免外部庫相容性問題。