Diese Sektion behandelt die meistverbreiteten Fehler, die beim Kompilieren von PHP auftauchen.
Sie müssen das GNU autoconf-Paket installiert haben, damit das configure-Skript aus configure.in generiert werden kann. Führen Sie ./buildconf im Hauptverzeichnis der vom SVN-Server geladenen Quellen aus. wird das configure-Skript generiert. (Solange Sie configure nicht mit der --enable-maintainer-mode-Option aufrufen, wird das configure-Skript nicht neu erstellt, wenn die configure.in-Datei aktualisiert wird. Es sollte also darauf geachtet werden, dass das configure-Skript manuell neu generiert wird, wenn Sie feststellen, dass configure.in verändert wurde. Ein Symptom für eine solche Veränderung ist, wenn Dinge wie @VARIABLE@ im Makefile auftachen, nachdem configure oder config.status ausgeführt wurde.
Sie müssen dem configure/setup-Skript den Top-Level-Pfad des Apache-Quellbaums mitteilen. Das bedeutet, dass z.B. --with-apache=/path/to/apache anstatt --with-apache=/path/to/apache/src angegeben werden muss.
Stellen Sie sicher, dass Sie Installation gründlich gelesen haben und beachten Sie, dass sowohl flex als auch bison zum Kompilieren von PHP installiert sein müssen. Abhängig von Ihrem System müssen Sie flex und bison entweder aus einer Quelle oder einem Paket wie z.B. RPM installieren.
Es ist möglich, das configure-Skript so anzupassen, dass es nicht nur in Standard-Pfaden nach Headerdatei und Bibliotheken sucht, indem dem C-Präprozessor und -Linker zusätzliche Flags übergeben werden:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Sie müssen Bison updaten. Die aktuellste Version findet sich unter » http://www.gnu.org/software/bison/bison.html.
Einige alte Versionen von make platzieren die kompilierten Versionen der Dateien nicht in das functions-Verzeichnis im gleichen Verzeichnis. Versuchen Sie, cp *.o functions auszuführen und danach erneut make zu starten, um zu prüfen, ob sich das Problem so lösen lässt. Sollte es dann funktionieren, empfehlen wir, Ihre Version von GNU make zu aktualisieren.
Schauen Sie sich die Link-Zeile an und stellen Sie sicher, dass alle nötigen Bibliotheken am Ende mit eingeschlossen werden. Häufig werden '-ldl' und Datenbankbibliotheken vergessen.
Einige Leute haben berichtet, dass sie '-ldl' unmittelbar nach libphp4.a einfügen mussten, wenn sie PHP mit Apache gelinkt haben.
Folgen Sie diesen Schritten:
Bitte beachten Sie: Sie können auch das neue Apache-./configure-Skript 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.
Das bedeutet, dass das PHP-Modul nicht aufgerufen wird. Sie sollten folgende drei Dinge überprüfen:
Die Datei libphp4.a soll gar nicht existieren, Apache wird sie selbst generieren.
Das ist eine irreführende Fehlermeldung des Apache, die in aktuellen Versionen behoben ist.
Hier sind drei Dinge zu überprüfen: Wenn Apache das apxs-Perl-Skript generiert, werden manchmal aus unerfindlichen Gründen nicht die richtigen Kompiler- und Variablen-Flags verwendet. Suchen Sie Ihr apxs-Skript (probieren Sie das Kommando which apxs); oft liegt es unter /usr/local/apache/bin/apxs oder /usr/sbin/apxs. Öffnen Sie es und überprüfen Sie 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
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
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 Ihre /usr/include-Dateien reparieren, indem Sie ein 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 einfachen Test durch:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
Zuerst ist es wichtig, dass Sie sich darüber im Klaren sind, dass dies eine Warnung ist und kein Fehler. Weil dies aber oft die letzte sichtbare Ausgabe von make ist, sieht es oft wie ein Fehler aus. Natürlich bricht der Kompiler ab, falls Sie ihn so konfiguriert haben, dass er bei Warnungen abbrechen soll. Beachten Sie, dass die MySQL-Unterstützung standardmäßig aktiviert ist.
Hinweis:
Bei PHP 4.3.2 sehen Sie auch den folgenden Text nachdem das Kompilieren (make) beendet wurde:
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
Entweder schauen Sie in die config.nice-Datei im Quellbaum Ihrer aktuellen PHP-Version nach, oder Sie führen folgendes Skript aus:
<?php phpinfo(); ?>
Stellen Sie sicher, dass PHP und die GD-Bibliothek gegen die selben Bibliotheken wie libPNG gelinkt sind.
Die Verwendung von nicht-GNU-Programmen beim Kompilieren kann Probleme verursachen. Verwenden sie GNU-Programme um sicherzustellen, dass das Kompilieren fehlerfrei klappt. Z.B. wird auf Solaris die Verwendung der SunOS-BSK-kompatiblen Version oder der Solaris-Version von sed nicht funktionieren. Verwenden Sie stattdessen die GNU- oder Sun-POSIX-(xpg4-)Version von sed. Links: » GNU sed, » GNU flex, und » GNU bison.