luk             Tue Mar  5 18:03:32 2002 EDT

  Added files:                 
    /phpdoc/cs/faq      build.xml 
  Log:
  
  
  

Index: phpdoc/cs/faq/build.xml
+++ phpdoc/cs/faq/build.xml
<?xml version="1.0" encoding="iso-8859-2"?>

<chapter id="faq.build">
  <title>Sestavovací (kompilační) problémy</title>
  <titleabbrev>Sestavovací (kompilační) problémy</titleabbrev>

   <para>
    Tato sekce shrnuje nejčastější chyby, které se vyskytují při sestavování
    PHP.    
   </para>

  <qandaset>
   <qandaentry id="faq.build.configure">
    <question>
     <para>
      Pomocí anonymního přístupu do CVS jsem získal poslední verzi PHP,
      ale chybí v ní skript "configure"!      
     </para>
    </question>
    <answer>
     <para>
      Musíte mít nainstalovaný balík "GNU autoconf", takže můžete vygenerovat
      skript "configure" z "configure.in". Po stažení zdrojových souborů
      z CVS serveru spusťte <command>./buildconf</command> z nejvyšší
      adresářové úrovně (pokud nespustíte "configure" s parametrem
      <literal>--enable-maintainer-mode</literal>, skript "configure"
      nebude automaticky aktualizován při změně souboru "configure.in",
      takže se musíte ujistit, zda jste to udělali ručně poté, co byl
      "configure.in" změněn. Jedním z příznaků tohoto je nalezení elementů
      jako @VARIABLE@ v souboru "Makefile" potom, co byl spuštěn "configure"
      nebo "config.status").
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.configuring">
    <question>
     <para>
      Mám problém nakonfigurovat PHP tak, aby fungovalo se serverem Apache.
      Hlásí, že nemůže najít httpd.h, ale ten je přesně tam, kde jsem uvedl,
      že je!
     </para>
    </question>
    <answer>
     <para>
      Potřebujete sdělit konfiguračnímu/instalačnímu skriptu umístění
      nejvyšší úrovně zdrojových souborů Apache. To znamená, že specifikujete
      '<literal>--with-apache=/path/to/apache</literal>'
      a <emphasis>ne</emphasis>
      '<literal>--with-apache=/path/to/apache/src</literal>'.
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.not-found">
    <question>
     <para>
      Když spustím "configure", hlásí to, že nemůže najít "include" soubory
      nebo knihovny pro GD, gdbm a nějaké další balíky!
     </para>
    </question>
    <answer>
     <para>
      Můžete určit, aby skript "configure" hledal hlavičkové soubory a
      knihovny na nestandardních místech specifikací pomocných příznaků pro
      C preprocesor a linker, například:
      <programlisting>
    CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
      </programlisting>
      Pokud používáte csh (C-shell) jako váš login shell (proč?), bylo by to:
      <programlisting>
    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
      </programlisting>
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.yytname">
    <question>
     <para>
      Když se kompiluje soubor language-parser.tab.c, hlásí to chyby, které
      říkají 'yytname undeclared'.
     </para>
    </question>
    <answer>
     <para>
       Musíte updatovat vaši verzi programu Bison. Nejnovější verzi najdete
       na <ulink url="&faqurl.bison;">&faqurl.bison;</ulink>.
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.link">
    <question>
     <para>
      Když spustím "make", zdá se, že běží dobře, ale havaruje, když se
      pokouší sestavit konečnou aplikaci s hlášením, že nemůže najít
      nějaké soubory.
     </para>
    </question>
    <answer>
     <para>
      Některé starší verze programu "make" neukládají korektně zkompilované
      verze souborů umístěných v adresáři funkcí do téhož adresáře. Zkuste
      spustit "<command>cp *.o functions</command>" a potom znovu
      '<command>make</command>', abyste viděli, zda to pomohlo. Pokud ano,
      měli byste opravdu nainstalovat nejnovější verzi "GNU make".
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.undefined">
    <question>
     <para>
      Při sestavování PHP to hlásí mnoho nedefinovaných referencí.
     </para>
    </question>
    <answer>
     <para>
      Podívejte se do řádku, kde je popsáno sestavování a ujistěte se,
      že byly přidány na konec všechny potřebné knihovny. Často se stává,
      že chybí '-ldl' a některé knihovny potřebné pro podporu databáze, kterou
      jste určili.
     </para>
     <para>
      Pokud sestavujete pro Apache 1.2.x, nezapomněli jste přidat odpovídající
      informace na řádek EXTRA_LIBS v souboru "configure" a spustit skript
      pro konfiguraci Apache? Pro více informací se podívejte do souboru 
      <ulink url="&faqurl.file.installation;">INSTALL</ulink>, který získáte
      s distribučním balíkem.
     </para>
     <para>
      Někteří lidé také hlásili, že pokud sestavovali pro Apache, museli
      přidat '-ldl' těsně za '<filename>libphp4.a</filename>'.
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.Apache">
    <question>
     <para>
      Nepřišel jsem na to, jak sestavit PHP pro Apache 1.3.
     </para>
    </question>
    <answer>
     <para>
      Toto je nyní velmi snadné. Následujte pečlivě tyto kroky:
      <itemizedlist>
       <listitem>
        <simpara>
         Stáhněte nejnovější distribuci Apache 1.3 z 
         <ulink url="&faqurl.apache;">&faqurl.apache;</ulink>.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Rozbalte ji někam, například do 
         <filename>/usr/local/src/apache-1.3</filename>.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Zkompilujte PHP nejdříve spuštěním 
         <command>./configure --with-apache=/&lt;path&gt;/apache-1.3</command>
         (nahraďte &lt;path&gt; aktuální cestou k adresáři apache-1.3).
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Napište '<literal>make</literal>' a potom '<literal>make install</literal>'
         k sestavení PHP a zkopírování potřebných souborů do distribučního
         stromu Apache.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Změňte adresář na <filename>/&lt;path&gt;/apache-1.3/src</filename>
         a upravte soubor <filename>Configuration</filename>. 
         Do souboru přidejte: 
         <literal>AddModule modules/php4/libphp4.a</literal>.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Spusťte '<command>./Configure</command>' a potom
         '<literal>make</literal>'.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Nyní byste měli míst hotové soubory httpd pro práci s PHP.
        </simpara>
       </listitem>
      </itemizedlist>
     </para>
     <para>
      <emphasis>Poznámka:</emphasis> : Můžete použít také nový skript 
      <literal>./configure</literal> pro Apache. Přečtěte si instrukce v
      <literal>README.configure</literal>, který je v distribuci Apache.
      Nahlédněte také do souboru <filename>INSTALL</filename> 
      z distribuce PHP.
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.not-running">
    <question>
     <para>
      Postupoval jsem přesně podle instrukcí k instalaci PHP ve verzi jako
      modul pro Apache na UNIXu, a moje PHP skripty se zobrazují v prohlížeči
      nebo se je prohlížeč snaží uložit jako soubory.
     </para>
    </question>
    <answer>
     <para>
      To znamená, že PHP modul není z nějakých důvodů vyvoláván. Dříve,
      než budete shánět další pomoc, zkontrolujte tři věci:
      <itemizedlist>
       <listitem>
        <simpara>
         Ujistěte se, že se spouští právě ten httpd, který jste
         zkompilovali. Zkuste spustit
         <literal>/path/to/binary/httpd -l</literal>
        </simpara>
        <simpara>
         Pokud v seznamu neuvidíte <filename>mod_php4.c</filename>,
         potom nespouštíte správnou verzi httpd. Najděte s instalujte správnou
         verzi.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Ujistěte se, že jste přidali správnou specifikaci Mime Type do
         souborů <literal>.conf</literal>pro Apache. Mělo by tam být: 
         <literal>AddType application/x-httpd-php3 .php3</literal> (pro PHP 3)
        </simpara>
        <simpara>
         nebo <literal>AddType application/x-httpd-php .php</literal> (pro PHP 4)
        </simpara>
        <simpara>
         Také se ujistěte, že tento řádek AddType není ukryt uvnitř bloku
          &lt;Virtualhost&gt; nebo &lt;Directory&gt;, což může zabránit
          aplikaci pravidla na oblast, kde je umístěn testovací skript.
        </simpara>
       </listitem>
       <listitem>
        <simpara>
         Konečně, implicitní umístění konfiguračních souborů Apache se
         mezi verzemi Apache 1.2 a 1.3 změnilo. Měli byste ověřit, že
         soubor, do kterého jste přidali řádek AddType je ten, který je
         skutečně načítán. Můžete zkusit vložit nějakou příšernou syntaktickou
         chybu do souboru httpd.conf nebo udělat nějakou jinou změnu tohoto
         rázu - uvidíte, zda je soubor správně načítán.
        </simpara>
       </listitem>
      </itemizedlist>
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.activate-module">
    <question>
     <para>
      Hlásí to použití
      <literal>--activate-module=src/modules/php4/libphp4.a</literal>, 
      ale tento soubor neexistuje; proto jsem to změnil na 
      <literal>--activate-module=src/modules/php4/libmodphp4.a</literal> a
      ono to nefunguje? O co jde?
     </para>
    </question>
    <answer>
     <para>
       Uvědomte si, že soubor libphp4.a nemá existovat.  Vytváří ho proces
       serveru Apache!
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.ansi">
    <question>
     <para>
      Když zkusím sestavit Apache s PHP jakožto statickým modulem pomocí       
      <literal>--activate-module=src/modules/php4/libphp4.a</literal>,
      hlásí to, že můj kompilátor nevyhovuje ANSI.
     </para>
    </question>
    <answer>
     <para>
      Toto je zavádějící chybové hlášení, které bylo odstraněno v pozdějších
      verzích.
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.apxs">
    <question>
     <para>
      Když zkusím sestavit PHP s parametrem <literal>--with-apxs</literal>,
      dostanu záhadné chybové zprávy.
     </para>
    </question>
    <answer>
     <para>
      Je třeba zkontrolovat tři věci. Nejdříve, z důvodu, že když Apache
      vytváří apxs skript v Perlu, někdy ukončí kompilaci bez odpovídajících
      proměnných. Najděte skript apxs (zkuste příkaz 'which apxs', někdy
      bývá v /usr/local/apache/bin/apxs nebo /usr/sbin/apxs). Otevřte ho
      a zkontrolujte řádky podobné těmto:
      <programlisting>
my $CFG_CFLAGS_SHLIB  = '&nbsp;';          # nahrazeno pomocí Makefile.tmpl
my $CFG_LD_SHLIB      = '&nbsp;';          # nahrazeno pomocí Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = '&nbsp;';          # nahrazeno pomocí Makefile.tmpl
      </programlisting>
      Pokud vidíte toto, našli jste ten problém. Mohou se tam vyskytovat
      mezery nebo jiné nekorektní hodnoty, např. 'q()'. Změňte řádky
      takto:
      <programlisting>
my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB      = 'gcc';             # nahrazeno pomocí Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = q(-shared);        # nahrazeno pomocí Makefile.tmpl 
      </programlisting>
      Druhý možný problém by měl vyskytovat pouze na Red Hat Linuxu 6.1
      a 6.2. Skript apxs v těchto distribucích Red Hat je poškozený.
      Najděte řádek
      <programlisting>
my $CFG_LIBEXECDIR    = 'modules';         # nahrazeno pomocí APACI install
      </programlisting>
      Pokud vidíte výše uvedený řádek, nahraďte ho tímto:
      <programlisting>
my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # nahrazeno pomocí APACI install
      </programlisting>
       Nakonec, když budete přeinstalovávat Apache, zařaďte 'make clean' 
       mezi './configure' a 'make'.
     </para>
    </answer>
   </qandaentry>

   <qandaentry id="faq.build.microtime">
    <question>
     <para>
     During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff.
    </para>
    </question>
    <answer>
     <para>
      During the 'make' portion of installation, if you encounter problems 
      that look similar to this:
      <programlisting>
    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>
     Váš systém je poškozen. Musíte opravit soubory v /usr/include instalací
     balíku glibc-devel, který patří k vašemu glibc.  Nemá to absolutně nic
     společného s PHP. Důkaz získáte tímto jednoduchým testem:
     <programlisting>
    $ cat &gt;test.c &lt;&lt;X
    #include &lt;sys/resource.h&gt;
    X
    $ gcc -E test.c &gt;/dev/null
      </programlisting>
      Pokud se objeví chyby, ve vašich hlavičkových souborech panuje chaos.
     </para>
    </answer>
   </qandaentry>
   
   <qandaentry id="faq.build.upgrade">
    <question>
     <para>
      Chci upgradovat své PHP. Kde najdu tvar řádku
      <command>./configure</command>, který byl použit pro sestavení stávající
      instalace PHP?
     </para>
    </question>
    <answer>
     <para>
      Když se podíváte do souboru config.nice ve zdrojovém stromu současné
      instalace PHP. Není-li k dispozici, jednoduše spusťte skript
      <programlisting>
       <?php phpinfo(); ?> 
      </programlisting>
      Nahoře ve výpisu najdete řádek <command>./configure</command>, který byl
      použit při sestavování stávající instalace.
     </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:"../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->

Reply via email to