Esta seção reúne os erros mais comuns que ocorrem na compilação.
Você precisa ter o pacote GNU autoconf instalado para que possa gerar o script configure a partir do configure.in. Basta executar ./buildconf no diretório raiz após a obtenção do código fonte do servidor do GIT. (Além disso, a menos que você execute com configure com a opção --enable-maintainer-mode, o script configure não será automaticamente recompilado quando o arquivo configure.in for atualizado, então você deve certificar-se de fazer isso manualmente quando você perceber que o configure.in mudou. Um sintoma disso é encontrar coisas como @VARIABLE@ em seu Makefile após configure ou config.statustiver sido executado.)
Você precisa informar ao script configure/setup a localização do diretório raíz do Apache. Isto significa que você precisa especificar --with-apache=/caminho/para/apache e não --with-apache=/caminho/para/apache/src .
Não deixe de ler as instruções de instalação cuidadosamente e note que você precisa de ambos flex e bison instalados para compilar o PHP. Dependendo da sua configuração você irá instalar bison e flex a partir de uma fonte ou pacote, como um RPM.
Você pode fazer o script configure procurar por arquivos de cabeçalho e bibliotecas em locais diferentes, especificando parâmetros adicionais para passar para o pré-processador C e linker, tais como:
CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
Você precisa atualizar sua versão do Bison. Você pode encontrar a última versão em » http://www.gnu.org/software/bison/bison.html.
Algumas versões antigas do make que não colocam corretmente a versão compilada dos arquivos nos diretórios das funções dentro do mesmo diretório. Tente rodar cp *.o functions e então execute novamente make para ver se isso ajuda. Se não ajudar, você realmente deve atualizar para uma versão mais recente do GNU make.
De uma olhada na linha do link e tenha certeza que todas as bibliotecas apropriadas estão sendo incluídas no final. É comum que talvez você tenha esquecido os '-ldl' e qualquer biblioteca requerida para qualquer suporte de banco de dados que você incluiu.
Algumas pessoas também reportaram que elas precisaram adicionar '-ldl' imediatamente seguindo libphp4.a quando linkando com o Apache.
Na verdade isso é bem fácil. Siga esses passos cuidadosamente:
Nota: Você também pode usar o novo script ./configure do Apache. Veja as instruções no arquivo README.configure o qual faz parte da sua distribuição Apache. Dê uma olhada também no arquivo INSTALL na distrubuição PHP.
Isso significa que o modulo do PHP não está sendo chamado por alguma razão. Três coisas para se verificar antes de pedir por mais ajuda:
Note que o arquivo libphp4.a não é para existir. O processo apache irá criá-lo!
Esta é uma mensagem de erro enganosa do Apache que foi corrigida nas versões mais recentes.
Há três coisas para verificar aqui. Em primeiro lugar, por alguma razão o Apache quando compila o script Perl apxs, às vezes acaba sendo compilado sem o compilador e os parâmetros corretos. Procure pelo seu script apxs (tente o comando which apxs), às vezes é encontrado em /usr/local/apache/bin/apxs ou /usr/sbin/apxs. Abra-o e verifique se existem linhas semelhantes a estas:
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
Enquanto é executada a porção make da instalação, se você encontrar problemas que parecem semelhantes a estes:
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
Seu sistema está quebrado. É preciso corrigir os arquivos /usr/include instalndo o pacote glibc-devel que corresponde ao seu glibc. Isto não tem absolutamente nada a ver com o PHP. Para provar isso a si mesmo, tente este teste simples:
$ cat >test.c <<X #include <sys/resource.h> X $ gcc -E test.c >/dev/null
Primeiramente, é importante perceber que este é um Warning e não um erro fatal. Porque esta é muitas vezes a última saída durante o make, ela pode parecer um erro fatal, mas não é. Claro que, se você definir o seu compilador para parar em warnings, ele vai parar. Além disso tenha sempre em mente que o suporte ao MySQL está habilitado por padrão.
Nota:
A partir do PHP 4.3.2, você também verá o seguinte texto depois que a compilação (make) for concluída:
Build complete.
(It is safe to ignore warnings about tempnam and tmpnam).
Ou você olha no arquivo config.nice, na pasta raíz atual da sua instalação do PHP, ou, se este não estiver disponível, basta executar um script
<?php phpinfo(); ?>
Certifique-se de que sua biblioteca GD e o PHP estejam ligadas à mesmas bibliotecas dependentes (libpng por exemplo).
Usar utilitários que não são GNU ao compilar o PHP pode causar problemas. Certifique-se de usar as ferramentas GNU, a fim de ter certeza de que a compilação do PHP funcionará. Por exemplo, no Solaris, usando tanto o SunOS BSD-compatible quanto versões do Solaris sed não vai funcionar, mas usando as versões GNU ou Sun POSIX (XPG4) do sed irá funcionar. Links: » GNU sed, » GNU flex, e » GNU bison.