Проблемы сборки
В этом разделе собраны наиболее общие ошибки, возникающие на этапе сборки.
- Я получил последнюю версию PHP, используя анонимный доступ к Git, но в нём нет конфигурационного скрипта!
- У меня возникают проблемы при конфигурировании PHP для работы с Apache. Он говорит, что не может найти httpd.h, хотя файл находится точно там, где я сказал!
- Во время конфигурации PHP (./configure) вы наталкиваетесь на ошибку, схожую со следующей: checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
- Когда я пытаюсь запустить Apache, я получаю следующее сообщение: fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
- Когда я запускаю configure, он говорит, что не может найти файлы include или библиотеку для GD, gdbm или какого-либо другого пакета!
- При компиляции файла language-parser.tab.c мне выдаются ошибки, говорящие yytname undeclared.
- Когда я запускаю make, похоже, он выполняется нормально, но на конечной линковке жалуется, что не может найти некоторые файлы.
- При компоновке PHP, он жалуется на некоторые неопределённые ссылки.
- Я не могу понять как собрать PHP c Apache 1.3.
- Я следовал всем шагам по установке модульной версии для Apache на Unix, но мои PHP скрипты выводятся в браузере или я получаю запрос сохранить файл.
- В документации рекомендуется использовать: --activate-module=src/modules/php4/libphp4.a, но такой файл не существует, поэтому я заменил это на --activate-module=src/modules/php4/libmodphp4.a и оно не работает!? Что происходит?
- Когда я пытаюсь собрать Apache c PHP в виде статического модуля, используя --activate-module=src/modules/php4/libphp4.a он говорит, что мой компилятор не ANSI-совместимый.
- Когда я пытаюсь собрать PHP с помощью --with-apxs, я получаю странное сообщение об ошибке.
- Во время выполнения make я очень быстро получаю ошибки и множество всяких RUSAGE_.
- При компиляции PHP с MySQL, configure выполняется нормально, но во время make я получаю ошибку типа следующей: ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp', в чём дело?
- Я хочу обновить мой PHP. Где я могу найти строку ./configure, которая была использована для моей текущей PHP установки?
- При сборке PHP с библиотекой GD, либо выдаются странные ошибки компиляции, либо ошибки сегментации (segfaults) при выполнении.
- При компиляции PHP я, кажется, получаю случайные ошибки, например она зависает. Я использую Solaris, если это имеет значение.
- Я получил последнюю версию PHP, используя анонимный доступ к Git, но в нём нет конфигурационного скрипта!
-
Вам нужен установленный пакет GNU autoconf для того, чтобы сгенерировать конфигурационный скрипт из configure.in. После получения исходников с Git сервера просто запустите ./buildconf в директории верхнего уровня. (Также, если вы запускаете configure без опции
--enable-maintainer-mode
, то конфигурационный скрипт не будет перестроен автоматически при изменении файла configure.in, поэтому вам необходимо делать это вручную, когда вы заметите, что configure.in изменился. Один из симптомов - появление таких вещей как @VARIABLE@ в вашем Makefile после выполнения configure или config.status.)
- У меня возникают проблемы при конфигурировании PHP для работы с Apache. Он говорит, что не может найти httpd.h, хотя файл находится точно там, где я сказал!
-
Для configure/setup скрипта вам необходимо указать директорию верхнего уровня, в которой находятся исходники Apache. Это означает, что вам надо задать --with-apache=/path/to/apache, а не --with-apache=/path/to/apache/src.
-
Во время конфигурации PHP (
./configure
) вы наталкиваетесь на ошибку, схожую со следующей:
checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up
-
Не забудьте внимательно прочитать инструкции по установке и заметьте, что для компиляции PHP вам нужно установить как flex, так и bison. В зависимости от ваших настроек, установите bison и flex либо из исходников, либо из пакетов, например, RPM.
- Когда я запускаю configure, он говорит, что не может найти файлы include или библиотеку для GD, gdbm или какого-либо другого пакета!
-
Вы можете сделать так, что скрипт configure будет искать файлы заголовков или библиотеки в нестандартных местах, задав дополнительные флаги для С препроцессора и компоновщика, такие как:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
-
При компиляции файла language-parser.tab.c
мне выдаются ошибки, говорящие
yytname undeclared
. -
Вам необходимо обновить вашу версию Bison. Последнюю версию можно найти на » http://www.gnu.org/software/bison/bison.html.
- Когда я запускаю make, похоже, он выполняется нормально, но на конечной линковке жалуется, что не может найти некоторые файлы.
-
Некоторые старые версии make ошибочно не помещают скомпилированные файлы в поддиректорию functions в той же директории. Попробуйте выполнить cp *.o functions и затем перезапустить make. Если это помогло, то вам действительно надо установить свежую версию GNU make.
- При компоновке PHP, он жалуется на некоторые неопределённые ссылки.
-
Посмотрите на строку для компоновки и убедитесь, что все нужные библиотеки добавлены в конце. Часто забывают '-ldl' и библиотеки, необходимые для поддержки включенных вручную баз данных.
Некоторые люди также сообщают, что при компоновке с Apache им пришлось добавить '-ldl' сразу после libphp4.a.
- Я не могу понять как собрать PHP c Apache 1.3.
-
На самом деле это очень легко. Аккуратно выполните следующие шаги:
- Скачайте последний дистрибутив Apache 1.3 с » http://httpd.apache.org/download.cgi.
- Разархивируйте (ungzip/untar) его где-нибудь, например, в /usr/local/src/apache-1.3.
- Скомпилируйте PHP, сперва запустив ./configure --with-apache=/<path>/apache-1.3 (замените <path> на ваш настоящий путь к директории apache-1.3.)
- Введите make с последующим make install для сборки PHP и копирования всех необходимых файлов в дерево дистрибутива Apache.
-
Перейдите в вашу директорию
/<path>/apache-1.3/src
и отредактируйте файл Configuration.
Добавьте в файл:
AddModule modules/php4/libphp4.a
. -
Введите: ./configure и затем
make
. - Теперь у вас должен быть бинарник httpd, поддерживающий PHP!
Замечание: Вы также можете использовать новый скрипт
./configure
в Apache. Смотрите инструкции в файлеREADME.configure
, входящем в ваш дистрибутив Apache. Также загляните в файл INSTALL из дистрибутива PHP.
- Я следовал всем шагам по установке модульной версии для Apache на Unix, но мои PHP скрипты выводятся в браузере или я получаю запрос сохранить файл.
-
Это означает, что по какой-то причине модуль PHP не вызывается. Перед тем как обращаться за помощью, проверьте три вещи:
-
Убедитесь, что запускаемый вами бинарник httpd действительно новый,
только что построенный httpd. Для этого попробуйте запустить:
/path/to/binary/httpd -l
Если вы не видите mod_php4.c в списке, то вы запускаете не тот бинарник. Найдите и установите правильный бинарник. -
Убедитесь, что вы добавили правильный Mime Type в один из ваших
Apache .conf
файлов. Это должно быть:AddType application/x-httpd-php .php
Также убедитесь, что эта строка AddType не попала внутрь <Virtualhost> или <Directory> блока, так как это не даст ей работать с местонахождением вашего тестового скрипта. - Наконец, между Apache 1.2 и Apache 1.3 расположение конфигурационных файлов Apache по умолчанию изменилось. Вам надо проверить, что действительно читается тот конфигурационный файл, в который вы добавили строку AddType. Вы можете внести очевидную синтаксическую ошибку в ваш httpd.conf файл или какое-либо другое заметное изменение, которое покажет вам, что читается правильный файл.
-
Убедитесь, что запускаемый вами бинарник httpd действительно новый,
только что построенный httpd. Для этого попробуйте запустить:
-
В документации рекомендуется использовать:
--activate-module=src/modules/php4/libphp4.a
, но такой файл не существует, поэтому я заменил это на--activate-module=src/modules/php4/libmodphp4.a
и оно не работает!? Что происходит? -
Заметьте, что файл libphp4.a не должен существовать. Он будет создан в процессе!
-
Когда я пытаюсь собрать Apache c PHP в виде статического модуля,
используя
--activate-module=src/modules/php4/libphp4.a
он говорит, что мой компилятор не ANSI-совместимый. -
Сообщение об ошибке вводит в заблуждение; это исправлено в более свежих версиях Apache.
- Когда я пытаюсь собрать PHP с помощью --with-apxs, я получаю странное сообщение об ошибке.
-
Проверьте три вещи. Во-первых, по какой-то причине, когда Apache создает Perl скрипт apxs, он получается без правильного компилятора и переменных, задающих флаги. Найдите ваш apxs скрипт (попробуйте команду which apxs), иногда он установлен как /usr/local/apache/bin/apxs или /usr/sbin/apxs. Откройте его и найдите строки, схожие с этими:
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl my $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmpl my $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
-
Во время выполнения make я очень быстро получаю
ошибки и множество всяких
RUSAGE_
. -
При выполнении make во время установки, если вы сталкиваетесь с проблемами, похожими на следующее:
microtime.c: In function `php_if_getrusage': microtime.c:94: storage size of `usg' isn't known microtime.c:97: `RUSAGE_SELF' undeclared (first use in this function) microtime.c:97: (Each undeclared identifier is reported only once microtime.c:97: for each function it appears in.) microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function) make[3]: *** [microtime.lo] Error 1 make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/master/php-4.0.1/ext' make: *** [all-recursive] Error 1
Ваша система сломана. Вы должны исправить ваши файлы /usr/include, установив пакет glibc-devel, который соответствует вашей glibc. Это абсолютно не зависит от PHP. Для доказательства попробуйте следующий простой тест:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
-
При компиляции PHP с MySQL, configure выполняется нормально,
но во время
make
я получаю ошибку типа следующей: ext/mysql/libmysqlclient/my_tempnam.o(.text+0x46): In function my_tempnam': /php4/ext/mysql/libmysqlclient/my_tempnam.c:103: the use of tempnam' is dangerous, better use mkstemp', в чём дело? -
Во-первых, важно понимать, что это
Warning
(предупреждение), а не фатальная ошибка. Так как это последнее, что выводится во времяmake
, оно может выглядеть как фатальная ошибка, но это не так. Конечно, если ваш компилятор умирает на предупреждениях, (Warnings), то тогда да. Также имейте ввиду, что поддержка MySQL включена по умолчанию.Замечание:
Начиная с PHP 4.3.2 вы также будете видеть следующий текст после того как сборка (make) завершится:
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
(Сборка завершена, можно безопасно игнорировать
предупреждения о tempnam и tmpnam.)
- Я хочу обновить мой PHP. Где я могу найти строку ./configure, которая была использована для моей текущей PHP установки?
-
Либо смотрите файл config.nice в дереве исходников вашей текущей PHP установки, либо, если это недоступно, просто выполните скрипт:
<?php phpinfo(); ?>
- При сборке PHP с библиотекой GD, либо выдаются странные ошибки компиляции, либо ошибки сегментации (segfaults) при выполнении.
-
Убедитесь, что ваша библиотека GD и PHP компонуются с одними и теми же зависимыми библиотеками (например, libpng).
- При компиляции PHP я, кажется, получаю случайные ошибки, например она зависает. Я использую Solaris, если это имеет значение.
-
Использование не GNU утилит во время компиляции PHP может вызвать проблемы. Чтобы быть уверенным, что компиляция PHP будет работать, используйте GNU утилиты. Например, в Solaris, использование SunOS BSD-совместимой или Solaris версии
sed
не будет работать, а GNU или Sun POSIX (xpg4) версииsed
будет. Ссылки: » GNU sed, » GNU flex, and » GNU bison.