在編譯安裝 PHP imagick 擴展時,常遇到 configure: error: Cannot locate header file MagickWand.h 錯誤。本文記錄真實排查過程,揭示 ImageMagick 6.8+ 目錄結構變更導致的頭文件路徑不匹配問題,提供軟連結快速修復方案。
環境:
PHP 5.4.13
ImageMagick 6.8.3-10 (源碼編譯安裝至 /usr/local)
imagick 3.0.1 (pecl 源碼編譯)
執行 ./configure 時輸出:
checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h
ImageMagick 6.8 版本起,頭文件安裝目錄從 /usr/local/include/ImageMagick/ 變更為 /usr/local/include/ImageMagick-6/(帶版本號)。但 imagick 的 configure 腳本仍在舊路徑搜尋,導致找不到 MagickWand.h。
# 實際頭文件位置
ls /usr/local/include/ImageMagick-6/
# MagickWand.h 存在於此
# configure 預期位置
ls /usr/local/include/ImageMagick/
# 目錄不存在
# 讓舊路徑指向新路徑
ln -s /usr/local/include/ImageMagick-6 /usr/local/include/ImageMagick
# 重新編譯
make clean && ./configure && make && make install
編譯即可通過,php -m | grep imagick 顯示模組載入成功。
若不想建立軟連結,可在 ./configure 時顯式指定 ImageMagick 前綴:
./configure --with-imagick=/usr/local
# 或
./configure --with-imagick=/usr/local/ImageMagick-6
但實測部分版本 configure 仍會在 $prefix/include/ImageMagick 硬編碼搜尋,軟連結法最通用。
php -r "print_r(getExtensionFuncs('imagick'));"
# 或
php -m | grep imagick
# 建立測試腳本
php -r "$im = new Imagick(); $im->readImage('test.jpg'); $im->resizeImage(100,100,Imagick::FILTER_LANCZOS,1); $im->writeImage('thumb.jpg'); echo 'OK';"
yum install ImageMagick-devel 或 apt install libmagickwand-dev 可自動處理頭文件路徑,優先使用套件管理器。pkg-config --cflags MagickWand 指向正確版本。/usr/local/include 需 root 寫入權限建立軟連結。ImageMagick 6.8+ 目錄結構變更是導致 Cannot locate header file MagickWand.h 的主因。建立 /usr/local/include/ImageMagick -> ImageMagick-6 軟連結即可一勞永逸。生產環境建議改用系統套件管理器安裝 php-imagick / php7.x-imagick,避免手動編譯維護負擔。