downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

PHP benutzen> <Installation
Last updated: Fri, 30 Oct 2009

view this page in

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. Sie werden während dem Ausführen von (./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, etc. Bibliotheken nicht gefunden werden konnten.
  6. Wenn die Datei language-parser.tab.c compiliert wird, erscheinen Fehler, die yytname undeclared besagen.
  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, berschwert es sich über undefinierte Referenzen.
  9. Wie wird PHP mit Apache 1.3.x compiliert?
  10. 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.
  11. 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.
  12. 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.
  13. Wenn ich versuche, PHP mittels der Option --with-apxs zu compilieren, bekomme ich komische Fehlermeldungen.
  14. Während des make bekomme ich Fehler in microtime und jede Menge RUSAGE_-Zeugs.
  15. Beim Compilieren 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?
  16. Ich möchte mein PHP aktualisieren. Wo kann ich die ./configure-Zeile finden, die von meiner aktuellen PHP-Version verwendet wird?
  17. Wenn ich PHP mit der GD-Library compiliere, tauchen seltsame Compilerfehler auf oder PHP startet nicht.
  18. Wenn ich PHP compiliere habe ich den Eindruck zufällige Fehler zu bekommen. Ich verwende Solaris.

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.

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 anstatt --with-apache=/path/to/apache/src angegeben werden muss.

Sie werden während dem Ausführen von (./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 nehmen Sie zur Kenntnis, das 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 von einer Source 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 compiliert. 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 weiter Informationen lesen Sie die Apache INSTALL Datei oder die Apache » DSO manual page.

Wenn ich configure ausführe, bekomme ich die Fehlermeldung, dass die include Dateien oder die GD, gdbm, etc. Bibliotheken nicht gefunden werden konnten.

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

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

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.

Haben Sie beim linken mit Apache 1.2.x 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 in der INSTALL Datei Ihrer Distribution.

Einige Leute haben berichtet, dass sie '-ldl' unmittelbar nach libphp4.a einfügen mußten, wenn sie PHP mit Apache gelinkt haben.

Wie wird PHP mit Apache 1.3.x compiliert?

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

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

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, Apache wird sie selbst generieren.

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.

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.

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.

Beim Compilieren 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 Compilier ab, falls Sie ihn so konfiguriert haben, dass er bei Warnungen abbrechen soll! Beachten Sie, das die MySQL Unterstützung standardmässig aktiviert ist.

Hinweis: Bei PHP 4.3.2 sehen Sie den folgenden Text nachdem make beended wurde:


Build complete.
(Warnungen über tempnam und tmpnam können Sie getrost ignorieren.)

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:

<?php phpinfo(); ?>

Zu Beginn der Datei wird die ./configure-Zeile angezeigt.

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.

Wenn ich PHP compiliere habe ich den Eindruck zufällige Fehler zu bekommen. Ich verwende Solaris.

Die Verwendung von nicht-GNU Programmen beim Compilieren kann Probleme verursachen. Verwenden sie GNU Programme um sicherzustellen, dass das Compilieren fehlerfrei klappt. Z.B. wird auf Solaris die Verwendung der SunOS BSK-kompatiblen Version oder der Solaris Version von sed nicht funktionieren. Verwenden Sie statt dessen die GNU oder Sun POSIX (xpg4) Version von sed Links: » GNU sed, » GNU flex, and » GNU bison.



PHP benutzen> <Installation
Last updated: Fri, 30 Oct 2009
 
add a note add a note User Contributed Notes
Probleme bei der Compilierung
terry at mackintoshweb dot com
20-Sep-2009 03:43
The configure script of PHP 5.3.0 has some test lines that use expr with the option --, my expr (version 2.0) does not except --.  This causes a run of error messages from the shell like:

./configure: line 2xxx: test: =: unary operator expected
expr: syntax error

I used buildconf --force to see if it would fix this.
While it resulted in a quit different file, it still had the lines of code with expr -- in it.
05-May-2007 01:48
@ anca-phpdoc at anca dot tv:

You can use ./configure --with-libxml-dir=/path_to_xml2-config
chris dot good at NOSPAM dot infor dot com
10-May-2006 07:12
Re Solaris
I was able to compile PHP 5.0.4 under Solaris 2.6 but I had to use gcc to do it. The source is not compatible with the Solaris C preprocessor. I did not have to install any of the gnu utilities (like sed etc) to get it to compile. It clean compiled & linked immediately using gcc 3.3.2.
timothy at imail dot ru
02-May-2006 02:24
Note on PHP5 setup under RedHat 7

Sometimes php5 fails to build with the following message:

[root@www bin]# ./php5
./php5: error while loading shared libraries: unexpected reloc type 0x80

Below is the configure script used:    

# PHP5 CLI build, CGI/SAPI disabled
# Created by configure

'./configure' \
'--enable-libxml' \
'--with-mysql=/path_to_mysql' \
'--with-libxml=/path_to_my_libxml' \
'--program-suffix=5' \
'--disable-cgi' \
"$@"

I used the following trick to get round this:

0. If it is not a clean installation, run 'make clean' to get rid of improperly compiled files

1. run ./configure with required options
2. edit makefile:
2.1 find any LDFLAGS or PROGRAM_LDFLAGS definition
2.2 append -lstdc++ to the end of it
3. Run 'make'
4. Run 'make install'
5. Enjoy!!!
anca-phpdoc at anca dot tv
09-Dec-2005 03:48
For the configure newbies among us:

If you update or reinstall any of the libraries used to compile in a different directory than they started out, you will need to make sure that you update the config.cache file (or re-generate it) so that configure will not look in the wrong place for the information.

On Mac OS X, for example, I updated my libxml using Fink.  Fink placed the files in the /sw directory.  However, php was still looking for important libxml files (such as xml2-config) in the old directory (/usr/bin/xml2-config).   After updating config.cache with the new value of the xml2-config path, I was able to compile correctly.
datemplar at freePotatoes dot fr
04-Oct-2005 12:15
If the option --with-apsx2=/path/to/apxs seems to have absolutely no effect and if the configure script ignores the Apache 2.x support, try to shutdown your Apache server (/path/to/bin/apachectl stop) and retry.

It worked here.
didier b.
07-Aug-2005 11:52
I post here because I was unable to find the information on the web.
I hope it will help someone.

Let say you have 2 apache ruuning, on one you want to have disable_functions set and on the other one you don't.

In fact I have (one) solution compiling two differents php modules with differents path to php.ini

using :
--with-config-file-path=/etc/php5  (for the first one)
--with-config-file-path=/etc/php5.nonchroote (for the second one)

for the second one I do not use "make install" but just
"cp .libs/libphp5.so /usr/lib/apache/1.3/libphp5.nonchroote.so"

Then you have to change the
LoadModule php5_module        /usr/lib/apache/1.3/libphp5.nonchroote.so in the second httpd.conf
brad at computechnv dot com
07-Apr-2005 10:07
My problem was actually with mod_dav (which referred me here). Since they took the time to point people here, I thought I'd go ahead and add my two cents worth and expand on the above since it obviously affects PHP as well. I am running Fedora Core 3, Apache 2.0.53, & PHP 5.03. Apache and PHP were built from source.

The first suggestion in section 13 above was close, but not exactly what I needed. jimsteele's suggestion would have worked, but you would have to do it every time you use APXS. What I did was copy these lines:

my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE';
my $CFG_LD_SHLIB      = 'gcc';
my $CFG_LDFLAGS_SHLIB = q(-shared);

and pasted them in the configuration section of my apxs file. Worked like a champ.
dl927 at torfree dot net
12-Feb-2004 05:17
Compiling mod_php4 port on a clean freeBSD 4.8 install for Apache2 needed FOR_APACHE2= yes manually inserted into Makefile prior to version check.
dale at botkin dot org
04-Nov-2002 10: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.
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

PHP benutzen> <Installation
Last updated: Fri, 30 Oct 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites