GD 庫編譯需遵循特定順序:t1lib → jpeg-6b → GD → PHP。此順序源於 GD 編譯時會檢測並連結 JPEG 庫,PHP 再連結 GD。若順序錯誤將導致編譯失敗或功能缺失。
wget https://sourceforge.net/projects/t1lib/files/t1lib/5.1.2/t1lib-5.1.2.tar.gz
tar -zxvf t1lib-5.1.2.tar.gz
cd t1lib-5.1.2
./configure --prefix=/usr/local/t1lib
make && make install
echo "/usr/local/t1lib/lib" >> /etc/ld.so.conf.d/t1lib.conf
ldconfig
wget https://www.ijg.org/files/jpegsrc.v6b.tar.gz
tar -zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b
mkdir -p /usr/local/jpeg6b/{bin,lib,include,man/man1}
./configure --prefix=/usr/local/jpeg6b --enable-shared --enable-static
make && make install
wget https://github.com/libgd/libgd/releases/download/gd-2.3.3/libgd-2.3.3.tar.gz
tar -zxvf libgd-2.3.3.tar.gz
cd libgd-2.3.3
./configure --prefix=/usr/local/gd2 \
--with-jpeg=/usr/local/jpeg6b \
--with-freetype=/usr/local/freetype \
--with-png=/usr/local/libpng \
--with-t1lib=/usr/local/t1lib
make && make install
關鍵參數說明:--with-jpeg、--with-freetype、--with-png 指定依賴庫路徑,確保 GD 編譯時正確連結。現代 GD 版本已內建 PNG 支援,若系統缺 libpng 需另行安裝。
wget https://www.php.net/distributions/php-8.2.10.tar.gz
tar -zxvf php-8.2.10.tar.gz
cd php-8.2.10
./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gd=/usr/local/gd2 \
--with-jpeg \
--with-freetype \
--with-zlib \
--enable-mbstring \
--enable-gd-native-ttf \
--with-openssl \
--with-curl \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www
make -j$(nproc) && make install
cp php.ini-production /usr/local/php/lib/php.ini
# 檢查 GD 模組載入
php -m | grep gd
# 查看詳細 GD 資訊
php -r "phpinfo();" | grep -A 10 "gd support"
# 預期輸出關鍵特性
# GD Support => enabled
# GD Version => bundled (2.3.3 compatible)
# FreeType Support => enabled
# JPEG Support => enabled
# PNG Support => enabled
# T1Lib Support => enabled
| 現象 | 可能原因 | 解決方案 |
|---|---|---|
| configure: error: jpeglib.h not found | jpeg 開發包未安裝或路徑錯誤 | 安裝 libjpeg-devel 或指定 --with-jpeg=/正確路徑 |
| GD 編譯通過但 PHP 不支援 JPEG | GD 編譯時未正確連結 jpeg 庫 | 重新編譯 GD,確認 config.log 中 JPEG 檢測為 yes |
| FreeType 字體渲染失敗 | freetype 版本過舊或路徑錯誤 | 升級 freetype ≥ 2.9,指定 --with-freetype |
| 共享庫載入失敗 | ldconfig 未更新或路徑缺失 | 將庫路徑加入 /etc/ld.so.conf.d/ 執行 ldconfig |
生產環境建議採用套件管理器安裝預編譯版本,確保安全更新與依賴一致性:
# CentOS/RHEL/Rocky/AlmaLinux
dnf install php-gd php-mysqlnd php-fpm
# Ubuntu/Debian
apt update && apt install php-gd php-mysql php-fpm
# Alpine
apk add php82-gd php82-mysqli php82-fpm
源碼編譯適用於:需要特定版本組合、自定義編譯參數、嵌入式環境、學習底層依賴關係等場景。
本文詳述了 Linux 下 GD 庫與 PHP 的源碼編譯整合全流程,強調了依賴安裝順序與關鍵配置參數。現代 PHP 版本(7.4+)已將 GD 內建為核心擴充套件,配置參數簡化為 --with-gd、--with-jpeg、--with-freetype 等無路徑形式。實際部署時請優先考慮發行版官方套件,源碼編譯作為特殊需求的補充方案。