Cette section couvre les erreurs les plus communes pouvant se produire lors de la compilation de PHP.
Vous devez avoir le logiciel GNU autoconf d'installé pour générer le
script configure à partir de configure.in. Lancez
juste ./buildconf à la racine du répertoire des sources
après avoir récupéré celles-ci à partir du serveur Git. (De plus, à
moins que vous ne lanciez configure avec l'option
--enable-maintainer-mode
, le script configure ne sera
pas automatiquement reconstruit si configure.in
est mis à jour, vous obligeant à le faire à la main quand vous remarquez
que configure.in est mis à jour. Une conséquence de
ceci est que l'on trouve des choses telles que @VARIABLE@ dans votre
Makefile après que configure ou config.status soit
lancé.)
Vous devez spécifier au script de configuration (configure) l'emplacement du répertoire ou sont les sources de Apache. Cela signifie que vous devez spécifier --with-apache=/chemin/vers/apache et pas --with-apache=/chemin/vers/apache/src.
./configure
), vous
rencontrez une erreur semblable à celle-ci :
Assurez-vous de bien avoir lu les instructions d'installation et d'avoir flex et bison d'installés pour compiler PHP. Selon votre système, vous devrez installer bison et flex à partir de sources ou bien de paquets, tel qu'un RPM.
Vous pouvez forcer le script configure à chercher les fichiers d'en-tête à des endroits non-standard en passant des options supplémentaires au préprocesseur C et à l'éditeur de liens, par exemple :
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
.
Vous devez mettre à jour votre version de bison. Vous pourrez trouver la dernière version sur » http://www.gnu.org/software/bison/bison.html.
Certaines anciennes versions de make ne déplacent pas correctement les versions compilées des fichiers dans le répertoire functions. Essayez de lancer cp *.o functions et de relancer make pour voir si le problème est résolu. Si tel est le cas, vous devriez vraiment mettre à jour votre version de GNU make.
Jetez un oeil à la ligne de lien et assurez-vous que toutes les bibliothèques nécessaires ont été incluses à la fin. Celles qui manquent probablement sont '-ldl' et les bibliothèques relatives aux bases de données dont vous voulez le support.
Des personnes nous ont rapporté qu'elle devaient ajouter '-ldl' immédiatement après libphp4.a lors de la compilation avec Apache.
Cela signifie que le module PHP n'est pas chargé, pour une raison ou pour une autre. Avant de chercher de l'aide ailleurs, veuillez vérifier ces quelques points :
/chemin/vers/le/binaire/httpd -l
Si vous ne voyez pas mod_php4.c dans la liste,
c'est que vous n'utilisez pas le bon binaire. Trouvez et installez
correctement le bon binaire.
Apache .conf
. Ce devrait être :
AddType application/x-httpd-php .php
Assurez-vous aussi que cette ligne Addtype n'est pas dissimulée dans
un contexte de <Virtualhost> ou <Directory> qui
l'empêcherait de s'appliquer à l'emplacement de vos scripts.
--activate-module=src/modules/php4/libphp4.a
,
mais ce fichier n'existe pas, alors je l'ai changé pour
--activate-module=src/modules/php4/libmodphp4.a
et ça
ne fonctionne pas. Qu'est ce qui se passe ?
Notez que le fichier libphp4.a n'est pas supposé exister. Le processus apache le créera !
--activate-module=src/modules/php4/libphp4.a
on me répond que mon compilateur n'est pas conforme aux normes ANSI.
C'est un mauvais message d'erreur de Apache qui n'apparaît plus dans des versions plus récentes.
Il y a trois choses à vérifier ici. Tout d'abord, quand Apache crée le script Perl apxs, il s'interrompt parfois en étant compilé sans le bon compilateur ou les bonnes options. Trouvez votre script apxs (lancez la commande which apxs), qui se trouve souvent à /usr/local/apache/bin/apxs ou bien /usr/sbin/apxs. Éditez-le et vérifiez que des lignes similaires sont présentes :
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_
.
Pendant le make, si vous rencontrez des problèmes identiques à celui-ci :
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
Votre système est défectueux. Vous devez corriger vos fichiers /usr/include en instalant un paquet glibc-devel qui correspond à votre version de la glibc. Cela n'a rien à voir avec PHP. Pour vous en convaincre, essayez ceci :
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
make
, j'obtiens une erreur de
ce style :
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',
qu'est ce qui ne va pas ?
Tout d'abord, il est important de savoir que ce n'est qu'un
Warning
et pas une erreur fatale. Comme c'est souvent la
dernière erreur vu lors du make
, ça a l'air d'une
erreur fatale, mais ça n'en est pas une. Bien sûr, si vous demandez à
votre compilateur de stopper à chaque Warning, ça en deviendra une.
Notez aussi que le support de MySQL est activé par défaut.
Note:
Depuis PHP 4.3.2, vous verrez le texte suivant après la compilation (make) :
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
Vous pouvez jetez un oeil au fichier config.nice dans votre répertoire source ou sinon simplement exécuter un script
<?php phpinfo(); ?>
Assurez-vous que votre bibliothèque GD et PHP sont liés aux mêmes bibliothèques (libpng, par exemple).
L'utilisation d'utilitaires non-GNU pour compiler PHP peut poser
problème. Assurez-vous de bien utiliser des outils GNU pour être certain
que votre compilation arrive à terme. Par exemple, sous Solaris,
utiliser les version SunOS BSD-compatible ou Solaris de
sed
ne fonctionnera pas, mais utiliser les versions
GNU ou Sun POSIX (xpg4) de sed
fonctionnera. Liens :
» GNU sed, » GNU
flex et » GNU bison.