Компиляция PHP с поддержкой GD и libjpeg
Я скомпилирую свой собственный PHP, частично, чтобы узнать больше о том, как скомпилирован PHP, а отчасти потому, что я всегда нахожу, что мне нужны модули, которые недоступны по умолчанию, и таким образом у меня есть контроль над этим.
Моя проблема в том, что я не могу получить поддержку JPEG в PHP. Использование 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
будет тем, что ему нужно, но я предоставил ему правильный каталог lib (--with-jpeg-dir=/usr/lib/
), и он не забирает их, поэтому я думаю, что они не могут быть правильными версиями.
rpm
говорит, что установлен libjpeg. Должен ли я yum remove
и переустановить его, и все его зависимые пакеты? Может ли это решить проблему?
Здесь паштет с коллекцией надежной полезной системной информации:
http://pastebin.com/ied0kPR6
Извинения за перекрестную регистрацию с ошибкой сервера (https://serverfault.com/q/304310/92291), хотя я попытался выяснить, что такое позиция Stack Exchange при перекрестке сообщений, и было непонятно: https://meta.stackexchange.com/q/75326/167958
Ответы
Ответ 1
по запросу:
Иногда configure script является немым, и вам нужно сделать --with-somelib =/usr вместо... =/usr/lib, потому что тест конфигурации написан как предоставленный путь + '/lib/' а не только предоставленный путь внутри страны. Возможно, вам придется копаться внутри набора тестов configure, чтобы узнать, что действительно требуется
Ответ 2
Не забудьте сделать
make clean
после настройки.
У меня есть другая конфигурация и сделайте это раньше, и старая установка не позволяет мне включить поддержку jpeg в GD.
Это спасает меня на 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
Ответ 3
Вам, скорее всего, потребуется установить версию разработки, а не версию во время выполнения libjpeg (конечно, во время выполнения вам понадобится версия времени выполнения).
Я не использую CentOS самостоятельно, но что-то вроде этого должно помочь:
rpm install libjpeg-devel
У меня может быть неправильное имя пакета, но посмотрите на что-то с постфиксами -dev
или -devel
.