1
0
mirror of https://github.com/php/doc-uk.git synced 2026-03-23 22:52:14 +01:00
Files
archived-doc-uk/faq/build.xml

491 lines
22 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: b8e1b1357def73f310c9f7405035b3acc0cb1eaf Maintainer: mproshchuk Status: ready -->
<chapter xml:id="faq.build" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Проблеми збірки</title>
<titleabbrev>Проблеми збірки</titleabbrev>
<para>
У цьому розділі зібрано найпоширеніші помилки, які виникають під час
збирання PHP.
</para>
<qandaset>
<qandaentry xml:id="faq.build.configure">
<question>
<para>
Я отримав останню версію PHP, використавши анонімний сервіс Git, але в ній
немає скрипту конфігурації!
</para>
</question>
<answer>
<para>
У вас має бути встановленим пакунок GNU autoconf, за допомогою якого
зможете генерувати скрипт конфігурації з
<filename>configure.in</filename>. Достатньо виконати
<command>./buildconf</command> в початковій теці після отримання
початкового коду з сервера Git. (Крім того, допоки ви не запустите
<command>configure</command> з параметром
<literal>--enable-maintainer-mode</literal>, скрипт конфігурації не буде
автоматично перебудовано, коли файл <filename>configure.in</filename>
оновиться, і вам доведеться робити це вручну, коли
<filename>configure.in</filename> зміниться. Ознакою того є слова
@VARIABLE@ у вашому Makefile після запуску конфігурації чи
<filename>config.status</filename>.)
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.configuring">
<question>
<para>
Я маю проблеми з налаштуванням PHP для роботи з Apache. Каже, що не може
знайти <filename>httpd.h</filename>, проте він точно там, де я вказав!
</para>
</question>
<answer>
<para>
Ви повинні назвати скрипту конфігурації розташування початкової теки
початкових кодів Apache. Це означає, що треба вказати
<option role="configure">--with-apache=/path/to/apache</option>, а
<emphasis>не</emphasis>
<option role="configure">--with-apache=/path/to/apache/src</option>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.lex">
<question>
<para>
Під час конфігурації PHP (<literal>./configure</literal>), ви натрапили на
помилку, подібну до наступної:
</para>
<para>
<screen>
checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up
</screen>
</para>
</question>
<answer>
<para>
Уважно перечитайте інструкції зі
<link linkend="install.unix">встановлення</link> та майте на увазі, що вам
потрібні встановлені пакунки flex і bison, щоб скомпілювати PHP. Залежно
від ваших налаштувань, bison і flex встановлюються або з джерела, або з
пакета, наприклад RPM.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.apache-sharedcore">
<question>
<para>
Коли я намагаюся запустити Apache, отримую таке повідомлення:
</para>
<para>
<screen>
fatal: relocation error: file /path/to/libphp4.so:
symbol ap_block_alarms: referenced symbol not found
</screen>
</para>
</question>
<answer>
<para>
Зазвичай ця помилка з'являється, коли Apache було скомпільовано, як DSO
для спільного використання. Спробуйте переконфігурувати Apache,
упевнившись, що ви використали принаймні наступні прапорці:
</para>
<para>
<screen>
--enable-shared=max --enable-rule=SHARED_CORE
</screen>
</para>
<para>
Більше інформації вгорі файлу Apache'а <filename>INSTALL</filename> або на
<link xlink:href="&url.apachedso;">Сторінці посібника з DSO</link> від
Apache.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.not-found">
<question>
<para>
Коли я запускаю скрипт конфігурації, він каже, що не може включити файли
або бібліотеку GD, gdbm, чи якогось іншого пакунка.
</para>
</question>
<answer>
<para>
Ви можете зробити так, щоб скрипт конфігурації шукав файли-заголовки та
бібліотеки в нестандартних місцях, задавши додаткові прапорці для
препроцесора C і компонувальника, наприклад:
<programlisting>
<![CDATA[
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
]]>
</programlisting>
Якщо ви використовуєте csh-варіант оболонки для авторизації (а нащо?), це
буде:
<programlisting>
<![CDATA[
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
]]>
</programlisting>
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.yytname">
<question>
<para>
Коли компілюється файл <filename>language-parser.tab.c</filename>, то
виводяться помилки <literal>yytname undeclared</literal>.
</para>
</question>
<answer>
<para>
Вам треба оновити пакунок Bison. Найновіша версія за адресою
<link xlink:href="&url.bison;">&url.bison;</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.link">
<question>
<para>
Коли я запускаю <command>make</command>, наче все йде добре, але
завершується невдачею під час компонування програми, скаржачись, що не
може знайти якісь файли.
</para>
</question>
<answer>
<para>
Деякі старі версії make не можуть правильно помістити скомпільовані файли
у теки. Спробуйте запустити <command>cp *.o functions</command>, потім
перезапустити <command>make</command>, щоб побачити, чи це допоможе. Якщо
так, то вам конче треба отримати найновішу версію GNU make.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.undefined">
<question>
<para>
Коли компоную PHP, воно скаржиться на кількість невизначених посилань.
</para>
</question>
<answer>
<para>
Подивіться на рядок з посиланнями, та упевніться, що усі необхідні
бібліотеки були включені. Здебільшого це "-ldl" та бібліотеки, потрібні
для включених баз даних.
</para>
<para>
Дехто каже, що треба дописати '-ldl' відразу після
<filename>libphp4.a</filename>, коли компонуєте модуль для Apache.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.not-running">
<question>
<para>
Я послідовно виконав усі кроки встановлення PHP, як модуля Apache у Unix,
а мої скрипти показуються в браузері, як простий текст, або браузер
пропонує мені зберегти файл.
</para>
</question>
<answer>
<para>
Це означає, що PHP-модуль чомусь не викликається.
Перед проханням про додаткову допомогу треба перевірити три речі:
<itemizedlist>
<listitem>
<simpara>
Упевніться, що запущений вами двійковий httpd — той, що ви перед
цим зібрали. Для цього виконайте: <literal>/path/to/binary/httpd -l</literal>
</simpara>
<simpara>
Якщо ви не бачите у списку <filename>mod_php4.c</filename>, отже
запущено не той двійковий файл. Знайдіть і встановіть потрібний.
</simpara>
</listitem>
<listitem>
<simpara>
Упевніться, що ви додали правильний MIME тип у одному з ваших
<literal>.conf</literal> файлів Apache. Наприклад:
<literal>AddType application/x-httpd-php .php</literal>
</simpara>
<simpara>
Також перевірте, чи інструкція AddType не знаходиться за межами
блоку &lt;Virtualhost&gt; або &lt;Directory&gt;, бо це не дозволить
застосувати її до вашого тестового скрипта.
</simpara>
</listitem>
<listitem>
<simpara>
В решті решт, стандартне розташування файлів конфігурації Apache у
версій 1.2 і 1.3 — відрізняється. Перевірте, що файли конфігурації,
в які ви записали AddType, будуть прочитані. Можна навмисно внести
помилку у ваш файл &httpd.conf; або будь-яку іншу очевидну зміну, яка
сигналізуватиме, що файл прочитано коректно.
</simpara>
</listitem>
</itemizedlist>
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.activate-module">
<question>
<para>
Там сказано використати
<literal>--activate-module=src/modules/php4/libphp4.a</literal>, але
такого файлу немає, тож я замінив параметр на
<literal>--activate-module=src/modules/php4/libmodphp4.a</literal>, та це
не спрацювало! Що відбувається?
</para>
</question>
<answer>
<para>
Зауважте, що файлу <filename>libphp4.a</filename> і не має існувати.
Процес Apache створить його!
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.ansi">
<question>
<para>
Коли я намагаюсь зібрати Apache із PHP, як статичним модулем,
використовуючи
<literal>--activate-module=src/modules/php4/libphp4.a</literal>, воно
каже, що мій компілятор не сумісний з ANSI.
</para>
</question>
<answer>
<para>
Це хибне повідомлення про помилку від Apache, яке буде виправлене в
майбутніх версіях.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.apxs">
<question>
<para>
Коли я намагаюся зібрати PHP, використовуючи
<option role="configure">--with-apxs</option>, отримую дивне повідомлення
про помилку.
</para>
</question>
<answer>
<para>
Треба перевірити три речі. По-перше, інколи Apache створює
Perl-скрипт "apxs", а останній не містить даних про потрібний
компілятор та поставлених прапорців. Знайдіть ваш скрипт apxs (спробуйте
команду <command>which apxs</command>), зазвичай він знаходиться у
<filename>/usr/local/apache/bin/apxs</filename> або
<filename>/usr/sbin/apxs</filename>. Відкрийте його і перевірте рядки,
схожі на ці:
<programlisting>
<![CDATA[
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
]]>
</programlisting>
Якщо це те, що ви бачите, проблему знайдено. Вони можуть містити тільки
пробіли або інші некоректні значення, такі як 'q()'. Замініть ці рядки на
наступні:
<programlisting>
<![CDATA[
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
]]>
</programlisting>
Друга можлива проблема може виникати у Red Hat 6.1 та 6.2. Скрипт apxs у
Red Hat зламаний. Знайдіть цей рядок:
<programlisting>
<![CDATA[
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
]]>
</programlisting>
Якщо ви бачите такий рядок, замініть його на:
<programlisting>
<![CDATA[
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
]]>
</programlisting>
По-третє, якщо переналаштовуєте або перевстановлюєте Apache, допишіть
<command>make clean</command> після <command>./configure</command> та
перед <command>make</command>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.microtime">
<question>
<para>
Протягом виконання <command>make</command> часто з'являються помилки і
більшість про <literal>RUSAGE_</literal>.
</para>
</question>
<answer>
<para>
Якщо протягом виконання <command>make</command> ви зіткнулися з такими
проблемами:
<programlisting>
<![CDATA[
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
]]>
</programlisting>
</para>
<para>
Ваша система зламана. Потрібно полагодити ваші файли у
<filename>/usr/include</filename>, встановивши пакунок glibc-devel, з тою
ж версією, що і у вашого glibc. Це не має абсолютно нічого спільного з
PHP. Щоб переконатися в цьому, спробуйте цей простий тест:
<programlisting>
<![CDATA[
$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null
]]>
</programlisting>
Якщо висвітяться помилки, знайте — ваші include-файли зіпсовані.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.mysql.tempnam">
<question>
<para>
Коли компілюю PHP з підтримкою MySQL, configure працює добре, але
виконуючи <literal>make</literal>, я отримую помилку схожу на:
<emphasis>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'</emphasis>,
що не так?
</para>
</question>
<answer>
<para>
Найперше, важливо усвідомити, що це <literal>попередження</literal>, а не
фатальна помилка. Через те, що здебільшого це кінцевий вивід команди
<literal>make</literal>, може здатися, що це фатальна помилка, але ні.
Звісно, якщо ви налаштували свій компілятор "вмирати" від попереджень, то
це буде нею. Ще майте на увазі, що стандартно підтримка MySQL ввімкнена.
</para>
<note>
<para>
Починаючи з PHP 4.3.2, після завершення збірки (make) ви також бачитимете
наступний текст:
</para>
<para>
<screen>
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
</screen>
</para>
</note>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.upgrade">
<question>
<para>
Я хочу оновити мій PHP. Де я можу дізнатися повну команду
<command>./configure</command>, яка була виконана для збирання
поточної встановленої версії?
</para>
</question>
<answer>
<para>
У файлі config.nice, або у дереві початкових кодів встановленого PHP, якщо це
недоступно, можете просто запустити скрипт
<programlisting role="php">
<![CDATA[
<?php phpinfo(); ?>
]]>
</programlisting>. Вгорі результату буде показано командний рядок
<command>./configure</command>, який було використано для збирання даної
версії PHP.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.build.gdlibs">
<question>
<para>
Під час збирання PHP з підтримкою GD виводяться дивні помилки компіляції
або під час виконання — помилки сегментації.
</para>
</question>
<answer>
<para>
Упевніться, що ваша бібліотека GD та PHP залежні від однакових бібліотек
(напр. libpng).
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.installation.needgnu">
<question>
<para>
Під час компіляції PHP я, здається, отримую випадкові помилки, наче вона
зависає. Я використовую Solaris, якщо це важливо.
</para>
</question>
<answer>
<para>
Використання не-GNU утиліт для компіляції PHP може спричинити проблеми.
Використовуйте інструменти GNU для впевненості у належній компіляції PHP.
Наприклад, у Solaris, використання BSD-сумісних версій
<literal>sed</literal> від SunOS або Solaris не спрацює, натомість версії
<literal>sed</literal> від GNU або Sun POSIX (xpg4) будуть працювати.
Посилання: <link xlink:href="&url.sed;">GNU sed</link>,
<link xlink:href="&url.flex;">GNU flex</link> та
<link xlink:href="&url.bison;">GNU bison</link>.
</para>
</answer>
</qandaentry>
</qandaset>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->