Probl�mes de compilation

Cette section couvre les erreurs les plus communes pouvant se produire lors de la compilation de PHP.

  1. J'ai t�l�charg� la derni�re version des sources de PHP en utilisant CVS, mais il n'y a pas de script configure !
  2. J'ai des probl�mes pour configurer PHP avec Apache. On m'indique que httpd.h n'est pas trouv�, mais il est bien l� ou je l'ai sp�cifi� !
  3. Pendant la configuration de PHP (./configure), vous rencontrez une erreur semblable � celle-ci : checking lex output file root... ./configure: lex: command not found configure: error: cannot find output from lex; giving up
  4. Quand je lance Apache, j'obtiens le message suivant : fatal: relocation error: file /path/to/libphp4.so: symbol ap_block_alarms: referenced symbol not found
  5. Quand je lance le ./configure, on me dit que les fichiers d'en-t�te de GD, gdbm, ... ne sont pas trouv�s !
  6. Quand le fichier language-parser.tab.c est compil�, j'obtiens un message yytname undeclared.
  7. Quand je lance make, tout semble bien se passer, mais �a �choue quand il essaie de lier l'application finale, en pr�tendant qu'il manque des fichiers.
  8. Au moment de lier PHP, il y a des r�f�rences ind�finies.
  9. Je ne vois pas comment compiler PHP avec Apache 1.3.
  10. J'ai suivi toutes les �tapes pour installer le module Apache sous Unix, mais malgr� tout, mes scripts PHP s'affichent en clair dans mon navigateur ou celui-ci me demande de sauver le fichier.
  11. Il est dit d'utiliser --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 ?
  12. Quand j'essaie de compiler Apache avec PHP en module statique en utilisant --activate-module=src/modules/php4/libphp4.a on me r�pond que mon compilateur n'est pas conforme aux normes ANSI.
  13. Quand j'esaie de compiler PHP avec --with-apxs, j'obtiens des messages d'erreur �tranges.
  14. Pendant le make, j'ai des erreurs concernant microtime et beaucoup de RUSAGE_.
  15. Quand je compile PHP avec le support MySQL, le configure se passe bien, mais pendant le make, j'obtiens une erreur de ce style : 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', qu'est ce qui ne va pas ?
  16. Je veux mettre � jour mon PHP. O� puis-je trouver la ligne ./configure qui a �t� utilis�e pour mon installation actuelle de PHP?
  17. Quand je compile PHP avec le support de la biblioth�que GD, j'obtiens des erreurs de compilation �trange, voire m�me des erreurs de segmentation.
  18. Quand je compile PHP, j'obtiens des erreurs al�atoires, voire m�me tout s'arr�te. J'utilise Solaris.

J'ai t�l�charg� la derni�re version des sources de PHP en utilisant CVS, mais il n'y a pas de script configure !

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 CVS. (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�.)

J'ai des probl�mes pour configurer PHP avec Apache. On m'indique que httpd.h n'est pas trouv�, mais il est bien l� ou je l'ai sp�cifi� !

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.

Pendant la configuration de PHP (./configure), vous rencontrez une erreur semblable � celle-ci :


checking lex output file root... ./configure: lex: command not found
configure: error: cannot find output from lex; giving up

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.

Quand je lance Apache, j'obtiens le message suivant :


fatal: relocation error: file /path/to/libphp4.so:
symbol ap_block_alarms: referenced symbol not found

Cette erreur survient g�n�ralement quand quelqu'un compile le coeur Apache comme biblioth�que partag�e DSO. Essayez de reconfigurer Apache, en vous assurant d'utiliser les options suivantes :


--enable-shared=max --enable-rule=SHARED_CORE

Pour davantage d'informations, lisez le fichier INSTALL � la racine de votre r�pertoire source Apache ou bien » le manuel des biblioth�ques DSO.

Quand je lance le ./configure, on me dit que les fichiers d'en-t�te de GD, gdbm, ... ne sont pas trouv�s !

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

Si vous utilisez une variante de csh, utilisez plut�t :

    env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure

Quand le fichier language-parser.tab.c est compil�, j'obtiens un message 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.php.

Quand je lance make, tout semble bien se passer, mais �a �choue quand il essaie de lier l'application finale, en pr�tendant qu'il manque des fichiers.

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.

Au moment de lier PHP, il y a des r�f�rences ind�finies.

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.

Si vous compilez par rapport � Apache 1.2.x, souvenez-vous de bien mettre les informatiosn appropri�es dans la ligne EXTRA_LIBS du fichier Configuration et relancez le script Configure de Apache. Lisez le chapitre sur l'installation pour plus de d�tails.

Des personnes nous ont rapport� qu'elle devaient ajouter '-ldl' imm�diatement apr�s libphp4.a lors de la compilation avec Apache.

Je ne vois pas comment compiler PHP avec Apache 1.3.

C'est relativement simple. Suivez attentivement ces �tapes :

  • T�l�chargez la derni�re version de Apache 1.3 sur » http://www.apache.org/dist/httpd/.
  • D�sarchivez le tout, par exemple dans /usr/local/src/apache-1.3.
  • Compilez PHP en lan�ant tout d'abord ./configure --with-apache=/<path>/apache-1.3 (remplacez <path> par le chemin de votre r�pertoire apache-1.3)
  • Tapez make puis make install pour compiler PHP et copier les fichiers n�cessaires dans le r�pertoire source Apache.
  • D�placez-vous dans votre r�pertoire /<path>/apache-1.3/src et �ditez le fichier Configuration. Ajoutez y : AddModule modules/php4/libphp4.a.
  • Tapez : ./configure puis make.
  • Vous devriez alors avoir une biblioth�que httpd avec le support de PHP !

Note: Vous pouvez utiliser le nouveau script ./configure de Apache. Suivez les instructions du fichier README.configure fourni avec votre version de Apache. Lisez aussi le fichier INSTALL inclus avec les sources de PHP.

J'ai suivi toutes les �tapes pour installer le module Apache sous Unix, mais malgr� tout, mes scripts PHP s'affichent en clair dans mon navigateur ou celui-ci me demande de sauver le fichier.

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 :

  • Assurez-vous que le binaire httpd que vous ex�cutez est bien le nouveau binaire que vous avez compil�. Pour cela, essayez de lancer : /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.
  • Assurez-vous que vous avez bien ajout� le bon type Mime � un de vos fichiers 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.
  • Enfin, l'emplacement par d�faut des fichiers de configuration Apache a chang� entre Apache 1.2 et Apache 1.3. Vous devriez v�rifier que les fichiers de configuration auxquels vous ajoutez la ligne Addtype sont bien ceux qui sont pris en compte. Vous pouvez introduire une erreur de syntaxe dans votre httpd.conf (ou bien tout autre changement incorrect) pour vous assurer que c'est bien ce fichier qui est pris en compte.

Il est dit d'utiliser --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 !

Quand j'essaie de compiler Apache avec PHP en module statique en utilisant --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.

Quand j'esaie de compiler PHP avec --with-apxs, j'obtiens des messages d'erreur �tranges.

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

Si c'est ce que vous voyez, vous avez trouv� votre probl�me. Elles peuvent contenir juste des espaces ou d'autres valeurs incorrectes, comme 'q()'. Changez ces lignes pour obtenir :

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

Le deuxi�me probl�me potentiel est uniquement relatif aux distributions Red Hat 6.1 et 6.2. The scripts apxs de Red Hat est d�fectueux. Cherchez cette ligne :

my $CFG_LIBEXECDIR    = 'modules';         # substituted via APACI install

Si vous la voyez telle quelle, changez-la en :

my $CFG_LIBEXECDIR    = '/usr/lib/apache'; # substituted via APACI install

Enfin, si vous reconfigurez/r�installez Apache, lancez un make clean entre votre ./configure et votre make.

Pendant le make, j'ai des erreurs concernant microtime et beaucoup de 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

Si vous obtenez des erreurs, c'est que vos fichiers d'en-t�te sont mauvais.

Quand je compile PHP avec le support MySQL, le configure se passe bien, mais pendant le make, j'obtiens une erreur de ce style : 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', 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).

Je veux mettre � jour mon PHP. O� puis-je trouver la ligne ./configure qui a �t� utilis�e pour mon installation actuelle de PHP?

Vous pouvez jetez un oeil au fichier config.nice dans votre r�pertoire source ou sinon simplement ex�cuter un script

<?php phpinfo(); ?>

Au d�but du r�sultat affich� figure la ligne ./configure qui f�t utilis�e lors de la configuration de votre PHP actuel.

Quand je compile PHP avec le support de la biblioth�que GD, j'obtiens des erreurs de compilation �trange, voire m�me des erreurs de segmentation.

Assurez-vous que votre biblioth�que GD et PHP sont li�s aux m�mes biblioth�ques (libpng, par exemple).

Quand je compile PHP, j'obtiens des erreurs al�atoires, voire m�me tout s'arr�te. J'utilise Solaris.

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.