Diese Sektion behandelt die meistverbreiteten Fehler, die beim Kompilieren von PHP auftauchen.
Sie müssen das GNU autoconf-Paket installiert haben, damit das
Konfigurationsskript aus configure.in generiert
werden kann. Führen Sie ./buildconf im
Hauptverzeichnis der vom Git-Server geladenen Quellen aus, wird das
configure-Skript generiert. (Solange Sie
configure nicht mit der --enable-maintainer-mode
-Option
aufrufen, wird das Konfigurationsskript 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.
./configure
),
mit einem Fehler wie dem Folgenden konfrontiert:
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
yytname
undeclared
.
Sie müssen Bison updaten. Die aktuelle 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.
Das bedeutet, dass das PHP-Modul nicht aufgerufen wird. Sie sollten folgende drei Dinge überprüfen:
/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.
Apache .conf
-Datei angegeben haben. Er
sollte AddType application/x-httpd-php .php
lauten.
Stellen Sie ebenfalls sicher, dass diese AddType-Anweisung sich nicht in
einem <Virtualhost>- oder <Directory>-Block befindet, da dies
verhindern würde, dass sie sich auf das Verzeichnis Ihres Testskript
auswirkt.
--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 gar nicht existieren, Apache wird sie selbst generieren.
--activate-module=src/modules/php4/libphp4.a
zu
kompilieren, kommt die Fehlermeldung, mein kompiler sei nicht
ANSI-konform.
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
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 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
make
bekomme ich einen Fehler
wie den Folgenden: 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'
Was habe ich falsch gemacht?
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.