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.
./configure
) do PHP, você se deparar com
um erro semelhante ao seguinte:
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
yytname undeclared
.
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 corretamente 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.
Confira a 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.
Isso significa que o módulo do PHP não está sendo chamado por alguma razão. Três coisas para se verificar antes de pedir por mais ajuda:
/path/to/binary/httpd -l
Se você não vê mod_php4.c na lista, então
você não está executando o binário correto. Encontre e instale o
binário correto.
Apache .conf
. Deveria ser:
AddType application/x-httpd-php .php
Também certifique-se que esta linha AddType não esteja escondida dentro de um
bloco <Virtualhost> ou <Directory> que possam
impedí-la de ser aplicada para a localização de seu script de teste.
--activate-module=src/modules/php4/libphp4.a
,
mas esse arquivo não existe, então mudei para
--activate-module=src/modules/php4/libmodphp4.a
e
não funciona!? O que está acontecendo?
Note que o arquivo libphp4.a não é para existir. O processo apache irá criá-lo!
--activate-module=src/modules/php4/libphp4.a
ele me diz que o meu compilador não é compatível com ANSI.
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
RUSAGE_
.
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 instalando 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
make
recebo um erro semelhante ao seguinte:
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',
o que está errado ?
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.