|
|
Kapitel 49. Probleme bei der Compilierung
Diese Sektion behandelt die meistverbreiteten Fehler, die beim
Compilieren von PHP auftauchen.
- 1.
Ich habe mir die aktuellste Version von PHP mit Hilfe des
Anonymous-CVS-Dienstes besorgt, kann aber kein configure-Script
finden.
- 2.
Ich habe Probleme. PHP f�r den Apache zu konfigurieren.
Er beschwert sich, dass er die Datei httpd.h
nicht finden kann, obwohl sie sich genau dort befindet, wo ich es
angegeben habe.
- 3.
When I run configure, it says that it can't find the
include files or library for GD, gdbm, or some other package!
- 4.
Wenn die Datei language-parser.tab.c
compiliert wird, erscheinen Fehler, die yytname
undeclared besagen.
- 5.
Wenn ich make ausf�hre, scheint alles normal
zu verlaufen, aber sobald es versucht, die Applikation zu linken,
beschwert es sich, einige Dateien nicht finden zu k�nnen.
- 6.
Wenn PHP gelinkt wird, berschwert es sich �ber undefinierte
Referenzen.
- 7.
Wie wird PHP mit Apache 1.3.x compiliert?
- 8.
Ich habe die Schritte, die zur Installation des Apache-Modules
unter UNIX n�tig sind, aber wenn ich mit meinem Browser PHP-Scripts
aufrufe, werde ich aufgefordert, die Dateien zu speichern.
- 9.
Es heisst, es muss
--activate-module=src/modules/php4/libphp4.a
benutzt werden, aber diese Datei existiert nicht, also habe ich es zu
--activate-module=src/modules/php4/libmodphp4.a
ge�ndert, aber es funktioniert nicht.
- 10.
Wenn ich versuche, den Apache mit PHP als statisches Modul
mittels --activate-module=src/modules/php4/libphp4.a zu
compilieren, kommt die Fehlermeldung, mein Compiler sei nicht
ANSI-Konform.
- 11.
Wenn ich versuche, PHP mittels der Option
--with-apxs zu compilieren, bekomme ich komische
Fehlermeldungen.
- 12.
W�hrend des make bekomme ich Fehler in
microtime und jede Menge RUSAGE_-Zeugs.
- 13.
Ich m�chte mein PHP aktualisieren. Wo kann ich die
./configure-Zeile finden, die von meiner aktuellen
PHP-Version verwendet wird?
- 14.
Wenn ich PHP mit der GD-Library compiliere, tauchen seltsame Compilerfehler auf oder PHP startet nicht.
1.
Ich habe mir die aktuellste Version von PHP mit Hilfe des
Anonymous-CVS-Dienstes besorgt, kann aber kein configure-Script
finden.
Sie m�ssen das GNU autoconf-Paket installiert haben, damit das
configure-Script aus configure.in generiert
werden kann. Mittels ./buildconf im
Hauptverzeichnis des vom CVS-Server gezogenen Source-Trees wird das
configure-Script generiert. Es ist zu
beachten, dass das configure-Script bei einer ge�nderten
configure.in nicht neu generiert wird, es sei
denn, configure wird mit dem Parameter
--enable-maintainer-mode aufgerufen. Es sollte also
darauf geachtet werden, dass das configure-Script manuell neu generiert
wird, wenn configure.in ver�ndert wurde. Ein Symptom f�r eine
Ver�nderung des configure.in ist, wenn Dinge wie @VARIABLE@ im
Makefile auftachen, nachem configure oder
config.status ausgef�hrt wurde.
2.
Ich habe Probleme. PHP f�r den Apache zu konfigurieren.
Er beschwert sich, dass er die Datei httpd.h
nicht finden kann, obwohl sie sich genau dort befindet, wo ich es
angegeben habe.
Sie m�ssen dem configure/setup-Script die Top-Level-Pfad des
Apache-Source-Trees mitteilen. Das bedeutet, dass z.B.
--with-apache=/path/to/apache korrekt ist,
--with-apache=/path/to/apache/src jedoch
nicht.
3.
When I run configure, it says that it can't find the
include files or library for GD, gdbm, or some other package!
Es ist m�glich, das configure-Script so anzupassen, dass es nicht
nur in Standard-Pfaden nach Headerdatei und Bibliotheken sucht, in dem
dem C Pr�prozessor und Linker zus�tzliche Flags �bergeben werden:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure |
Wenn Sie (aus welchem Grund auch immer) eine csh-Variante als
Login-Shell verwenden:
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure |
4.
Wenn die Datei language-parser.tab.c
compiliert wird, erscheinen Fehler, die yytname
undeclared besagen.
Sie m�ssen Bison updaten. Die aktuellste Version findet sich
unter .
5.
Wenn ich make ausf�hre, scheint alles normal
zu verlaufen, aber sobald es versucht, die Applikation zu linken,
beschwert es sich, einige Dateien nicht finden zu k�nnen.
Einige alte Versionen von make platzieren die compilierten
Versionen der Dateien nicht in das korrekte Verzeichnis. Versuchen
Sie, das Problem zu l�sen, indem sie zun�chst mittels cp *.o
functions die Dateien an der vorgesehenen Platz kopieren,
und anschlie�end make noch einmal ausf�hren. Sollte
es dann funktionieren, empfehlen wir, Ihre Version von GNU make zu
aktualisieren.
6.
Wenn PHP gelinkt wird, berschwert es sich �ber undefinierte
Referenzen.
Schauen Sie sich die Link-Zeile an, und stellen Sie sicher, das
alle n�tigen Bibliotheken am Ende mit eingeschlossen werden. H�ufig
werden '-ldl' und Datenbankbibliothken vergessen.
Wenn Sie mit Apache 1.2.x linken, haben Sie daran gedacht, die
ben�tigten Informationen in die EXTRA_LIBS-Zeile des
Konfigurationsscriptes einzuf�gen, und haben Sie das configure-Script
des Apache wiederholt ausgef�hrt? Weitere Informationen dazu finden
Sie im File
Ihrer Distribution.
Einige Leute haben berichtet, dass sie '-ldl' unmittelbar nach
libphp4.a einf�gen mu�ten, wenn sie PHP mit
Apache gelinkt haben.
7.
Wie wird PHP mit Apache 1.3.x compiliert?
Folgen Sie diesen Schritten:
Besorgen Sie sich die letzte Version von Apache unter
.
Entpacken Sie die Datei zum Beispiel unter
/usr/local/src/apache-1.3.
Compilieren Sie zun�chst PHP, zum Beispiel mit
./configure --with-apache=/<path>/apache-1.3
(ersetzen Sie <path> mit dem Pfad zu Ihrem
apache-1.3-Verzeichnis.
F�hren Sie make, gefolgt von einem
make install aus, und kopieren die ben�tigten
Dateien in den Apache-Tree.
Wechseln Sie in das Verzeichnis
/<path>/apache-1.3/src und bearbeiten die
Datei Configuration.
F�gen Sie AddModule modules/php4/libphp4.a
hinzu.
F�hren Sie ./Configure, gefolgt von
make aus.
Nun sollte eine lauff�hige Version eines PHP-f�higen Apaches
compiliert sein.
Bitte beachten Sie: Sie k�nnen auch das
neue Apache ./configure-Script nutzen. Weitere
Informationen dazu finden sie in der Datei
README.configure, die der Apache-Distribution
beiliegt. Auch in der Datei INSTALL Ihrer
PHP-Distribution finden sich Informationen dazu.
8.
Ich habe die Schritte, die zur Installation des Apache-Modules
unter UNIX n�tig sind, aber wenn ich mit meinem Browser PHP-Scripts
aufrufe, werde ich aufgefordert, die Dateien zu speichern.
Das bedeutet, dass das PHP-Modul nicht aufgerufen wird. Sie
sollten folgende Dinge �berpr�fen:
Stellen Sie sicher, dass das httpd-Binary, das Sie ausf�hren, tats�chlich
das neue httpd-Binary ist, das sie compiliert haben. Um das zu tun
versuchen Sie, /path/to/binary/httpd -l auszuf�hren.
Wenn mod_php4.c nicht auftaucht, f�hren
Sie nicht das korrekte Binary aus. Finden und installieren Sie das
korrekte Binary.
Stellen Sie sicher, dass Sie den korrekten Mime-Type in ihrer
Apache .conf-Datei angegeben haben. Er
sollte AddType application/x-httpd-php3
.php3 (f�r PHP 3)
oder AddType application/x-httpd-php .php
(f�r PHP 4) lauten.
Stellen Sie ebenfalls sicher, dass diese AddType-Anweisung
sich nicht in einem <Virtualhost> oder <Directory> Block
befindet.
Der Standardplatz der Apache Konfigurationsdateien hat sich
von Apache 1.2 zu Apache 1.3 ver�ndert. Sie sollten sicherstellen, das
die Konfigurationsdatei, zu der sie die AddType-Anweisung hinzugef�gt
haben diejenige ist, die auch verarbeitet wird. Sie k�nnen einen
offensichtlichen Syntaxfehler oder eine andere eindeutige �nderung in
Ihre httpd.conf einfbauen, um dies zu �berpr�fen.
9.
Es heisst, es muss
--activate-module=src/modules/php4/libphp4.a
benutzt werden, aber diese Datei existiert nicht, also habe ich es zu
--activate-module=src/modules/php4/libmodphp4.a
ge�ndert, aber es funktioniert nicht.
Die Datei libphp4.a soll nicht existieren,
der Apache wird es generieren.
10.
Wenn ich versuche, den Apache mit PHP als statisches Modul
mittels --activate-module=src/modules/php4/libphp4.a zu
compilieren, kommt die Fehlermeldung, mein Compiler sei nicht
ANSI-Konform.
Das ist eine irref�hrende Fehlermeldung des Apache, die in
aktuellen Versionen behoben ist.
11.
Wenn ich versuche, PHP mittels der Option
--with-apxs zu compilieren, bekomme ich komische
Fehlermeldungen.
Hier sind drei Dinge zu �berpr�fen: Wenn Apache das apxs
Perlscript generiert, werden manchmal aus unerfindlichen Gr�nden nicht
die richtigen Compiler-Flags verwendet. �ffnen Sie Ihr apxs-Script und
�berpr�fen es auf Zeilen, die �hnlich wie folgende aussehen:
my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmpl
my $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl |
Wenn Sie so etwas sehen, haben Sie Ihr Problem gefunden. �ndern
Sie die Zeilen wie folgt:
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 |
Das zweite m�gliche Problem kann unter Red Hat 6.1 und 6.2
auftauchen. Das apxs-Script, das Red Hat ausliefert, ist fehlerhaft.
Suchen sie nach dieser Zeile:
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install |
�ndern Sie diese Zeile in
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install |
Zuguterletzt, wenn sie Apache neu installieren, f�gen Sie ein
make clean nach dem ./configure
und vor dem make ein.
12.
W�hrend des make bekomme ich Fehler in
microtime und jede Menge RUSAGE_-Zeugs.
Wenn w�hrend des make-Teils der Installation
Probleme auftauchen, die wie folgt aussehen:
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 |
ist Ihr System besch�digt. Sie m�ssen Ihr
/usr/include reparieren, indem sie das
glibc-devel-Paket installieren, dessen Version mit der Ihrer glibc
�bereinstimmt. Das hat absolut nichts mit PHP zu tun. Um sich
selbst davon zu �berzeugen, f�hren Sie folgenden simplen Test durch:
$ cat >test.c <<X
#include <sys/resource.h>
X
$ gcc -E test.c >/dev/null |
Wenn hier Fehler auftauchen, wissen sie, dass Ihre include-Dateien
fehlen oder fehlerhaft sind.
13.
Ich m�chte mein PHP aktualisieren. Wo kann ich die
./configure-Zeile finden, die von meiner aktuellen
PHP-Version verwendet wird?
Entweder schauen sie in die
config.nice-Datei im Source-Tree ihrer aktuellen
PHP-Version nach, oder Sie f�hren folgendes Script aus:
Zu Beginn der Datei wird die
./configure-Zeile angezeigt.
14.
Wenn ich PHP mit der GD-Library compiliere, tauchen seltsame Compilerfehler auf oder PHP startet nicht.
Stellen Sie sicher, dass PHP und die GD-Library gegen die selben Bibliotheken wie libPNG gelinkt sind.
User Contributed Notes Probleme bei der Compilierung |
|
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
|
|
gorilladf at hotmail dot com
11-Jul-2002 12:11 |
|
PHP 4.2.1 and Apache 2.0.39 to work
Finally! Wow, let me see if I
can get this right. Here is what I did:
1) Downloaded and installed
the following: Latest STABLE php from snaps.php.net (dated 7/10/02 9
AM) pth-1.4.1.tar.gz from ftp.gnu.org/gnu/pth/ (this 'may' have
helped!) 2) reconfigured, apache using: ./configure
--prefix=/path/to/apache --with-module=so make clean, make, make
install (NOTE: I don't think this was needed, but I wanted clean! Also
didn't start it yet.)
3) installed the new STABLE php 4.2.1 and
made some changes: In 'path to php'/ext/standard commented out in
microtime.c line 31 "#ifedf HAVE_SYS_RESOURCE_H" to
"/* #ifedf HAVE_SYS_RESOURCE_H */" NO quotes! and also line
33 "#endif" to "/* #endif */" No Quotes! I
don't know what the problem was. I knew it needed the include on line
32. so this just puts the darn thing in! The previous problems in
php_functions.c seemed to be fixed, so no change there.
4) config
php: run 'make distclean' ./configure --with-mysql --with-zlib
--with-apxs2=/usr/local/apache/bin/apxs Note: /usr/local/apache is my
path! Yours could be /I/like/grandma/bin/apxs! make clean, make
NOTE: I get like 6 warnings about RLIM_INFINITY being redefined
during the make. I believe it has to do with different versions of my
resource.h. I think this is due to uprading my kernel. Not to worry if
you get this. It is just a warning. Has to do with the declaration of
the size of it I think. make install
5) back to
/usr/local/apache/conf and edit httpd.conf make sure that 'AddType
application/x-httpd-php .php' is there IT WASN'T! Rumor says it auto
places it. HEH! Also make sure 'LoadModule
php4_module modules/libphp4.so' is there. It was. Huh??? Oh
well. apachectl start a edit quick helloworld.php open fav
web browser, bang! Scream Haleluyah while dancing a jig! People in
office look at you funny. Man I hope I save someone some time!
|
|
SprSquish at hotmail dot com
26-Sep-2002 07:10 |
|
I was having some issues with building PHP with GD. After some search on
the web I found out that all I needed to do was remove the config.cache
file then run ./configure with my options and I was all set. Here's the
page that helped me out on this:
|
|
dale at botkin dot org
04-Nov-2002 09: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.
|
|
|
| |