使用GD和libjpeg支持编译PHP

22

我自己编译 PHP,一部分是为了更深入地了解 PHP 的构造方式,另一部分是因为我经常发现需要的模块在默认情况下无法使用,这样我就可以对此进行控制。

我的问题是,我无法在 PHP 中获取 JPEG 支持。我使用的是 CentOS 5.6。以下是我在编译 PHP 5.3.8 时的配置选项:

 './configure'  '--enable-fpm' '--enable-mbstring' '--with-mysql' '--with-mysqli' '--with-gd' '--with-curl' '--with-mcrypt' '--with-zlib' '--with-pear' '--with-gmp' '--with-xsl' '--enable-zip' '--disable-fileinfo' '--with-jpeg-dir=/usr/lib/'

./configure输出如下:

checking for GD support... yes
checking for the location of libjpeg... no
checking for the location of libpng... no
checking for the location of libXpm... no

然后我们可以看到GD已经安装好了,但是缺少JPEG支持:

# php -r 'print_r(gd_info());'
Array
(
    [GD Version] => bundled (2.0.34 compatible)
    [FreeType Support] =>
    [T1Lib Support] =>
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] =>
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] =>
    [XBM Support] => 1
    [JIS-mapped Japanese Font Support] =>
)
我知道PHP需要找到libjpeg,但它似乎找不到满意的版本。我本以为/usr/lib/libjpeg.so/usr/lib/libjpeg.so.62就是所需的,但我提供了正确的库目录(--with-jpeg-dir=/usr/lib/),但它并没有识别它们,所以我猜它们可能不是正确的版本。 rpm显示已安装libjpeg。我应该使用yum remove命令卸载并重新安装它及其依赖包吗?这样会解决问题吗? 这里有一个paste bin,其中包含一些有用的系统信息:http://pastebin.com/ied0kPR6 很抱歉与Server Fault的交叉发布(https://serverfault.com/q/304310/92291),尽管我试图了解Stack Exchange对交叉发布的立场,但并不清楚:https://meta.stackexchange.com/q/75326/167958

2
有时候配置脚本很傻,你必须使用--with-somelib=/usr而不是...=/usr/lib,因为配置测试是写成providedpath + '/lib/'而不仅仅是providedpath。你可能需要深入挖掘配置测试套件,找出真正所需的内容。 - Marc B
我尝试了 --with-jpeg-dir=/usr。它输出了 checking for the location of libjpeg... /usr,但仍然没有JPEG支持。我无法确定在哪里查看配置脚本的课程代码 - 你知道我可以在哪里找到吗? - Robin Winslow
应该配置一个 configure.in 文件或类似的文件,其中列出了 configure 脚本应执行的测试。 - Marc B
1
是的!我认为这就是解决方案。我设置了 --with-jpeg-dir=/usr/local/,现在它可以工作了!请将此解决方案发布为答案,我会接受它。 - Robin Winslow
在运行“make”之前,请确保您执行“make clean”。对我来说,这是缺失的关键步骤 :-) - Peter Z
显示剩余2条评论
3个回答

20

有时候配置脚本比较蠢,你不得不使用--with-somelib=/usr而不是...=/usr/lib,因为配置测试是写成providedpath + '/lib/'的形式,而不仅仅是providedpath内部。你可能需要在configure测试套件中查找真正所需的内容。


4
在 CentOS 7 上安装 PHP 7,需要使用以下命令: --with-gd --with-jpeg-dir=/usr/lib64 - user473305

15

配置完成后别忘了执行

make clean

我之前进行了其他一些配置和编译操作,但旧的安装方式导致我无法在GD中启用jpeg支持。

这对我在Ubuntu 12.04 64位系统上非常有用。

我还使用了这些软件包:

aptitude install libjpeg62-dev libpng-dev libfreetype6-dev

使用这些配置选项:

./configure \
  --with-config-file-path=/usr/local/apache2/conf \
  --with-jpeg-dir \
  --with-png-dir \
  --with-vpx-dir \
  --with-freetype-dir \
  --enable-apc \
  --enable-bcmath \
  --enable-calendar \
  --enable-dba \
  --enable-exif \
  --enable-ftp \
  --enable-mbstring \
  --enable-shmop \
  --enable-sigchild \
  --enable-soap \
  --enable-sockets \
  --enable-sysvmsg \
  --enable-zip \
  --enable-gd-native-ttf  \
  --with-gd \
  --with-apxs2=/usr/local/httpd/bin/apxs \
  --with-bz2 \
  --with-curl \
  --with-gettext \
  --with-mcrypt \
  --with-mysql-sock=/var/run/mysqld/mysqld.sock \
  --with-openssl \
  --with-pdo-mysql \
  --with-xmlrpc \
  --with-zlib

然后:

make clean
make
make install

在Apache 2.4.3和PHP 5.4.11上运行良好


从某个PHP版本开始,在运行配置脚本之前,你必须先执行make clean命令,否则会缺少一些文件。 - Ry-

1

你很可能需要安装libjpeg的开发版本,而不是运行时版本(当然,在编译后将需要运行时版本)。

我自己不使用CentOS,但类似以下命令应该会有所帮助:

rpm install libjpeg-devel

我可能包名写错了,但是找一下带有-dev或者-devel后缀的东西。


如果我执行 rpm -qa | grep -e libjpeg,它会显示 libjpeg-devel-6b-37。大概就够了吧?我已经在我发布的 pastebin 链接中贴出了这个命令的输出结果。 - Robin Winslow
抱歉 - 没有看到你的粘贴。我觉得这已经足够了,如果你是指它已经安装好了(我不使用rpm)。 - Bojangles
如果我不应该使用 rpm,那么我应该从哪里安装它?我尝试从源代码编译它,但似乎很难找到它的“官方”来源。你知道从哪里下载 libjpeg 最好吗? - Robin Winslow
抱歉,我的意思是“我不使用rpm”。我假设-qa开关列出已安装的软件包。 - Bojangles
是的。它表示已安装的软件包。 - Robin Winslow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接