|
|
Kapitola 51. Sestavovac� (kompila�n�) probl�my
Tato sekce shrnuje nej�ast�j�� chyby, kter� se vyskytuj� p�i sestavov�n�
PHP.
- 1.
Pomoc� anonymn�ho p��stupu do CVS jsem z�skal posledn� verzi PHP,
ale chyb� v n� skript "configure"!
- 2.
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!
- 3.
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!
- 4.
Kdy� se kompiluje soubor language-parser.tab.c, hl�s� to chyby, kter�
��kaj� 'yytname undeclared'.
- 5.
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.
- 6.
P�i sestavov�n� PHP to hl�s� mnoho nedefinovan�ch referenc�.
- 7.
Nep�i�el jsem na to, jak sestavit PHP pro Apache 1.3.
- 8.
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.
- 9.
Hl�s� to pou�it�
--activate-module=src/modules/php4/libphp4.a,
ale tento soubor neexistuje; proto jsem to zm�nil na
--activate-module=src/modules/php4/libmodphp4.a a
ono to nefunguje? O co jde?
- 10.
Kdy� zkus�m sestavit Apache s PHP jako�to statick�m modulem pomoc�
--activate-module=src/modules/php4/libphp4.a,
hl�s� to, �e m�j kompil�tor nevyhovuje ANSI.
- 11.
Kdy� zkus�m sestavit PHP s parametrem --with-apxs,
dostanu z�hadn� chybov� zpr�vy.
- 12.
During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff.
- 13.
Chci upgradovat sv� PHP. Kde najdu tvar ��dku
./configure, kter� byl pou�it pro sestaven� st�vaj�c�
instalace PHP?
1.
Pomoc� anonymn�ho p��stupu do CVS jsem z�skal posledn� verzi PHP,
ale chyb� v n� skript "configure"!
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 ./buildconf z nejvy���
adres��ov� �rovn� (pokud nespust�te "configure" s parametrem
--enable-maintainer-mode, 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").
2.
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!
Pot�ebujete sd�lit konfigura�n�mu/instala�n�mu skriptu um�st�n�
nejvy��� �rovn� zdrojov�ch soubor� Apache. To znamen�, �e specifikujete
'--with-apache=/path/to/apache'
a ne
'--with-apache=/path/to/apache/src'.
3.
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!
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:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure |
Pokud pou��v�te csh (C-shell) jako v� login shell (pro�?), bylo by to:
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure |
4.
Kdy� se kompiluje soubor language-parser.tab.c, hl�s� to chyby, kter�
��kaj� 'yytname undeclared'.
Mus�te updatovat va�i verzi programu Bison. Nejnov�j�� verzi najdete
na .
5.
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.
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 "cp *.o functions" a potom znovu
'make', abyste vid�li, zda to pomohlo. Pokud ano,
m�li byste opravdu nainstalovat nejnov�j�� verzi "GNU make".
6.
P�i sestavov�n� PHP to hl�s� mnoho nedefinovan�ch referenc�.
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.
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
, kter� z�sk�te
s distribu�n�m bal�kem.
N�kte�� lid� tak� hl�sili, �e pokud sestavovali pro Apache, museli
p�idat '-ldl' t�sn� za 'libphp4.a'.
7.
Nep�i�el jsem na to, jak sestavit PHP pro Apache 1.3.
Toto je nyn� velmi snadn�. N�sledujte pe�liv� tyto kroky:
St�hn�te nejnov�j�� distribuci Apache 1.3 z
.
Rozbalte ji n�kam, nap��klad do
/usr/local/src/apache-1.3.
Zkompilujte PHP nejd��ve spu�t�n�m
./configure --with-apache=/<path>/apache-1.3
(nahra�te <path> aktu�ln� cestou k adres��i apache-1.3).
Napi�te 'make' a potom 'make install'
k sestaven� PHP a zkop�rov�n� pot�ebn�ch soubor� do distribu�n�ho
stromu Apache.
Zm��te adres�� na /<path>/apache-1.3/src
a upravte soubor Configuration.
Do souboru p�idejte:
AddModule modules/php4/libphp4.a.
Spus�te './Configure' a potom
'make'.
Nyn� byste m�li m�st hotov� soubory httpd pro pr�ci s PHP.
Pozn�mka: : M��ete pou��t tak� nov� skript
./configure pro Apache. P�e�t�te si instrukce v
README.configure, kter� je v distribuci Apache.
Nahl�dn�te tak� do souboru INSTALL
z distribuce PHP.
8.
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.
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:
Ujist�te se, �e se spou�t� pr�v� ten httpd, kter� jste
zkompilovali. Zkuste spustit
/path/to/binary/httpd -l
Pokud v seznamu neuvid�te mod_php4.c,
potom nespou�t�te spr�vnou verzi httpd. Najd�te s instalujte spr�vnou
verzi.
Ujist�te se, �e jste p�idali spr�vnou specifikaci Mime Type do
soubor� .confpro Apache. M�lo by tam b�t:
AddType application/x-httpd-php3 .php3 (pro PHP 3)
nebo AddType application/x-httpd-php .php (pro PHP 4)
Tak� se ujist�te, �e tento ��dek AddType nen� ukryt uvnit� bloku
<Virtualhost> nebo <Directory>, co� m��e zabr�nit
aplikaci pravidla na oblast, kde je um�st�n testovac� skript.
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.
9.
Hl�s� to pou�it�
--activate-module=src/modules/php4/libphp4.a,
ale tento soubor neexistuje; proto jsem to zm�nil na
--activate-module=src/modules/php4/libmodphp4.a a
ono to nefunguje? O co jde?
Uv�domte si, �e soubor libphp4.a nem� existovat. Vytv��� ho proces
serveru Apache!
10.
Kdy� zkus�m sestavit Apache s PHP jako�to statick�m modulem pomoc�
--activate-module=src/modules/php4/libphp4.a,
hl�s� to, �e m�j kompil�tor nevyhovuje ANSI.
Toto je zav�d�j�c� chybov� hl�en�, kter� bylo odstran�no v pozd�j��ch
verz�ch.
11.
Kdy� zkus�m sestavit PHP s parametrem --with-apxs,
dostanu z�hadn� chybov� zpr�vy.
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:
my $CFG_CFLAGS_SHLIB = '�'; # nahrazeno pomoc� Makefile.tmpl
my $CFG_LD_SHLIB = '�'; # nahrazeno pomoc� Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = '�'; # nahrazeno pomoc� Makefile.tmpl |
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:
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 |
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
my $CFG_LIBEXECDIR = 'modules'; # nahrazeno pomoc� APACI install |
Pokud vid�te v��e uveden� ��dek, nahra�te ho t�mto:
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # nahrazeno pomoc� APACI install |
Nakonec, kdy� budete p�einstalov�vat Apache, za�a�te 'make clean'
mezi './configure' a 'make'.
12.
During 'make', I get errors in microtime, and a lot of 'RUSAGE_' stuff.
During the 'make' portion of installation, if you encounter problems
that look similar to this:
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 |
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:
$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null |
Pokud se objev� chyby, ve va�ich hlavi�kov�ch souborech panuje chaos.
13.
Chci upgradovat sv� PHP. Kde najdu tvar ��dku
./configure, kter� byl pou�it pro sestaven� st�vaj�c�
instalace PHP?
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
Naho�e ve v�pisu najdete ��dek ./configure, kter� byl
pou�it p�i sestavov�n� st�vaj�c� instalace.
add a note
User Contributed Notes
Sestavovac� (kompila�n�) probl�my
dl927 at torfree dot net
12-Feb-2004 05:17
Compiling mod_php4 port on a clean freeBSD 4.8 install for Apache2 needed FOR_APACHE2= yes manually inserted into Makefile prior to version check.
tim at digicol dot de
24-Oct-2003 10:25
It seems to be very important to use the right version of bison - versions 1.28 and 1.875 should be OK, 1.75 (as delivered with SuSE Linux 8.2, for example) will not work (maybe depending on your configure options).
See:
dale at botkin dot org
04-Nov-2002 10:20
If you have customized your Apache to lie about its version number, you may need to edit configure to skip the version number check. Just /APACHE_VERSION in configure to find the instance(s) where configure checks to make sure you have the right combination of --with-apxs or --with_apxs2 and Apache 1.3 or 2.0. Assuming you're smart enough to remember which version of Apache you have, you can just delete or comment out the version check and continue to march.
jimsteele at nospam dot com
14-Oct-2001 08:43
Defining the right environment variables for my Apache "make" invocation allowed the correct "apxs" file to be generated for me. Your mileage may vary.
cd ../apache_1.3.22
CFLAGS_SHLIB="-fpic -DSHARED_MODULE" \
LD_SHLIB=gcc \
LDFLAGS_MOD_SHLIB="-shared" \
make
| |