Probleme bei der Kompilierung

Diese Sektion behandelt die meistverbreiteten Fehler, die beim Kompilieren von PHP auftauchen.

  1. Ich habe mir die aktuelle Version von PHP mit Hilfe des anonymen Git-Dienstes besorgt, kann aber kein configure-Skript 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. 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
  4. 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
  5. 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.
  6. Wenn die Datei language-parser.tab.c kompiliert wird, erscheinen Fehler mit der Meldung yytname undeclared.
  7. 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.
  8. Wenn PHP gelinkt wird, beschwert es sich über undefinierte Referenzen.
  9. 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.
  10. 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.
  11. 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.
  12. Wenn ich versuche, PHP mittels der Option --with-apxs zu kompilieren, bekomme ich komische Fehlermeldungen.
  13. Während make bekomme ich Fehler in microtime und jede Menge RUSAGE_-Zeugs.
  14. 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/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?
  15. Ich möchte mein PHP aktualisieren. Wo kann ich die ./configure-Zeile finden, die von meiner aktuellen PHP-Version verwendet wird?
  16. Wenn ich PHP mit der GD-Bibliothek kompiliere, tauchen seltsame Kompilerfehler auf oder PHP startet nicht (Segfault).
  17. Wenn ich PHP kompiliere habe ich den Eindruck zufällige Fehler zu bekommen. Ich verwende Solaris.
Ich habe mir die aktuelle Version von PHP mit Hilfe des anonymen Git-Dienstes besorgt, kann aber kein configure-Skript finden.

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.)

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 aktuelle Version findet sich unter » http://www.gnu.org/software/bison/bison.html.

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.

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/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).

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:

<?php phpinfo(); ?>
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.

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
Kategorie: mySQL-Tutorials

Wie kann man komplexe Abfragen mit SQL-Querys In MySQLi effektiv durchführen?

In diesem MySQL-Tutorial wird erklärt, wie komplexe SQL-Abfragen in MySQLi effizient durchgeführt werden können. Wir werden uns mit verschiedenen Aspekten der Datenbankabfrage beschäftigen und spezifische Methoden kennenlernen. ...

TheMax

Autor : TheMax
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum
PHP 8.3.3 - App kann auf dem PC nicht ausgeführt werden

Problem gelöst. Die php.exe hatte einen defekt. Neue heruntergeladen und fertig.

Geschrieben von Tetra1081 am 10.04.2024 16:49:14
Forum: PHP Developer Forum