PHP 5.4.x Handbuch
Probleme bei der Kompilierung
Diese Sektion behandelt die meistverbreiteten Fehler, die beim
Kompilieren von PHP auftauchen.
-
Ich habe mir die aktuellste Version von PHP mit Hilfe des
anonymen SVN-Dienstes besorgt, kann aber kein configure-Skript
finden.
-
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 werden während des Konfigurierens von PHP (./configure),
mit einem Fehler wie dem Folgenden konfrontiert:
checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up
-
Warum bekomme ich folgende Meldung, wenn ich versuche Apache zu starten?
fatal: relocation error: file /path/to/libphp4.so:
symbol ap_block_alarms: referenced symbol not found
-
Wenn ich configure ausführe, bekomme ich die Fehlermeldung, dass
die include-Dateien oder die GD-, gdbm- oder andere etc. Bibliotheken nicht
gefunden werden konnten.
-
Wenn die Datei language-parser.tab.c
kompiliert wird, erscheinen Fehler mit der Meldung yytname
undeclared.
-
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.
-
Wenn PHP gelinkt wird, beschwert es sich über undefinierte
Referenzen.
-
Wie wird PHP mit Apache 1.3.x kompiliert?
-
Ich habe die Schritte, die zur Installation des Apache-Moduls
unter Unix nötig sind, befolgt, aber meine PHP-Skripte sind im
Browser zu sehen oder ich werde aufgefordert, die Dateien zu speichern.
-
Es heißt, 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.
-
Wenn ich versuche, Apache mit PHP als statisches Modul
mittels --activate-module=src/modules/php4/libphp4.a zu
kompilieren, kommt die Fehlermeldung, mein kompiler sei nicht
ANSI-konform.
-
Wenn ich versuche, PHP mittels der Option --with-apxs zu kompilieren, bekomme ich
komische Fehlermeldungen.
-
Während make bekomme ich Fehler in
microtime und jede Menge RUSAGE_-Zeugs.
-
Beim Kompilieren von PHP mit MySQL läuft configure zwar ohne Probleme,
aber beim Ausführen von make bekomme ich einen Fehler
wie den Folgenden: ext/mysql/libmysql/my_tempnam.o(.text+0x46):
In function my_tempnam': /php4/ext/mysql/libmysql/my_tempnam.c:103: the
use of tempnam' is dangerous, better use mkstemp'
Was habe ich falsch gemacht?
-
Ich möchte mein PHP aktualisieren. Wo kann ich die
./configure-Zeile finden, die von meiner aktuellen
PHP-Version verwendet wird?
-
Wenn ich PHP mit der GD-Bibliothek kompiliere, tauchen seltsame
Kompilerfehler auf oder PHP startet nicht (Segfault).
-
Wenn ich PHP kompiliere habe ich den Eindruck zufällige Fehler zu
bekommen. Ich verwende Solaris.
-
Ich habe mir die aktuellste Version von PHP mit Hilfe des
anonymen SVN-Dienstes besorgt, kann aber kein configure-Skript
finden.
-
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.
-
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-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.
-
Sie werden während des Konfigurierens von PHP (./configure),
mit einem Fehler wie dem Folgenden konfrontiert:
checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up
-
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.
-
Warum bekomme ich folgende Meldung, wenn ich versuche Apache zu starten?
fatal: relocation error: file /path/to/libphp4.so:
symbol ap_block_alarms: referenced symbol not found
-
Dieser Fehler tritt in der Regel auf, wenn man den Apache-Kern als
gemeinsam verwendete DSO-Bibliothek kompiliert. Versuchen Sie Apache
neu zu konfigurieren und stellen Sie sicher, dass zumindest die
folgenden Flags gesetzt sind:
--enable-shared=max --enable-rule=SHARED_CORE
Für weitere Informationen lesen Sie die
Apache-INSTALL-Datei oder die
Apache-» DSO-Handbuchseite.
-
Wenn ich configure ausführe, bekomme ich die Fehlermeldung, dass
die include-Dateien oder die GD-, gdbm- oder andere etc. Bibliotheken nicht
gefunden werden konnten.
-
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
Wenn Sie (aus welchem Grund auch immer) eine csh-Variante als
Login-Shell verwenden, dann nutzen Sie folgende Flags:
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
-
Wenn die Datei language-parser.tab.c
kompiliert wird, erscheinen Fehler mit der Meldung yytname
undeclared.
-
Sie müssen Bison updaten. Die aktuellste Version findet sich
unter » http://www.gnu.org/software/bison/bison.html.
-
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 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.
-
Wenn PHP gelinkt wird, beschwert es sich über undefinierte
Referenzen.
-
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.
-
Wie wird PHP mit Apache 1.3.x kompiliert?
-
Folgen Sie diesen Schritten:
-
Besorgen Sie sich die letzte Version von Apache unter
» http://httpd.apache.org/download.cgi.
-
Entpacken Sie die Datei zum Beispiel unter
/usr/local/src/apache-1.3.
-
Kompilieren 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 Sie die benötigten
Dateien in das Apache-Verzeichnis.
-
Wechseln Sie in das Verzeichnis
/<path>/apache-1.3/src und
bearbeiten Sie 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 kompiliert
sein.
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.
-
Ich habe die Schritte, die zur Installation des Apache-Moduls
unter Unix nötig sind, befolgt, aber meine PHP-Skripte sind im
Browser zu sehen oder ich werde aufgefordert, die Dateien zu speichern.
-
Das bedeutet, dass das PHP-Modul nicht aufgerufen wird. Sie
sollten folgende drei Dinge überprüfen:
-
Stellen Sie sicher, dass das httpd-Binary, das Sie ausführen, tatsächlich
das neue httpd-Binary ist, das sie kompiliert 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 einer Ihrer
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.
-
Der Standardort der Apache-Konfigurationsdateien hat sich
von Apache 1.2 zu Apache 1.3 verändert. Sie sollten sicherstellen, dass
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.
-
Es heißt, 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 gar nicht existieren,
Apache wird sie selbst generieren.
-
Wenn ich versuche, Apache mit PHP als statisches Modul
mittels --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.
-
Wenn ich versuche, PHP mittels der Option --with-apxs
zu kompilieren, bekomme ich
komische Fehlermeldungen.
-
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
Wenn Sie so etwas sehen, haben Sie Ihr Problem gefunden. Sie enthalten
eventuell nur Leerzeichen oder anderen inkorrekte Werte, wie 'q()'.
ä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-kcript, das Red Hat ausliefert, ist fehlerhaft.
Suchen sie nach dieser Zeile:
my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
Falls Sie die Zeile sehen, ändern Sie diese in
my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
Zu guter Letzt, wenn sie Apache neu installieren, fügen Sie ein
make clean nach dem ./configure
und vor dem make ein.
-
Während 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 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
Wenn hier Fehler auftauchen, wissen sie, dass Ihre include-Dateien
fehlen oder fehlerhaft sind.
-
Beim Kompilieren von PHP mit MySQL läuft configure zwar ohne Probleme,
aber beim Ausführen von make bekomme ich einen Fehler
wie den Folgenden: ext/mysql/libmysql/my_tempnam.o(.text+0x46):
In function my_tempnam': /php4/ext/mysql/libmysql/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).
-
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 Quellbaum Ihrer aktuellen
PHP-Version nach, oder Sie führen folgendes Skript aus:
Zu Beginn der Ausgabe wird die
./configure-Zeile angezeigt.
-
Wenn ich PHP mit der GD-Bibliothek kompiliere, tauchen seltsame
Kompilerfehler auf oder PHP startet nicht (Segfault).
-
Stellen Sie sicher, dass PHP und die GD-Bibliothek gegen die selben
Bibliotheken wie libPNG gelinkt sind.
-
Wenn ich PHP kompiliere habe ich den Eindruck zufällige Fehler zu
bekommen. Ich verwende Solaris.
-
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.
Anmerkungen zum PHP Handbuch
|
Neue Anmerkung schreiben
|
|