在較新 GCC(4.5+)下編譯 MySQL 5.1.x 常遇到 make[2]: *** [do_abi_check] Error 1,這是已知的 ABI 檢查腳本與新版 GCC 不兼容導致。最簡單的規避方案是禁用該檢查。
make[2]: *** [do_abi_check] 錯誤 1
make[2]: Leaving directory `/root/mysql-5.1.44'
make[1]: *** [abi_check] 錯誤 2
make[1]: Leaving directory `/root/mysql-5.1.44'
make: *** [all-recursive] 錯誤 1
MySQL 5.1 構建系統包含一個 ABI 兼容性檢查步驟(do_abi_check),其腳本使用 set -ex 在新版 GCC 下因語法/行為差異導致非零退出,阻斷編譯。
Makefile(通常在源碼根目錄或 sql/ 子目錄)。do_abi_check 目標:grep -n "do_abi_check" Makefile
典型片段:
abi_check: do_abi_check
do_abi_check:
set -ex; \
...檢查命令...
set -ex; \ 及其後續命令行,或直接將整個 do_abi_check 目標改為空操作:do_abi_check:
@echo "ABI check skipped"
make。MySQL 5.1 已停止維護(EOL 2013),強烈建議遷移至 5.7/8.0,原生支持現代 GCC,且獲得安全補丁與性能提升。若必須維護舊系統,上述修補可暫時解燃眉之急。
make && make install
# 確認無 do_abi_check 相關報錯即可
註:修改的是構建目錄下的 Makefile,非源碼原始 Makefile.am/in,重新 configure 會覆蓋,需在 configure 後、make 前操作。