Como posso consertar este erro ao tentar construir o php para um sistema Windows de 64 bits?

2

Eu preciso rodar o php em um site no nosso servidor Windows 2003 de 64 bits e enquanto o php oferece binários de 32 bits para o Windows, eles não estão oferecendo os de 64 bits no momento.

Não consigo alternar o IIS 6 para executar aplicativos de 32 bits, pois ele interrompe todos os meus outros sites do asp.net.

O que estou fazendo é tentar construir o php a partir do código-fonte para um destino de 64 bits, seguindo este guia: link

Eu usei a janela de comando do ambiente de compilação do Windows SDK para criar isso e comecei emitindo o comando:

setenv /x64 /xp /release

.. para definir o destino da compilação como "Segmentação do Windows XP x64 RELEASE"

Eu emiti a linha de configuração de:

configure --disable-all --enable-cli --enable-isapi

O que resulta na falha durante a construção (é bom se eu omitir --enable-isapi que não quero fazer):

Microsoft (R) Program Maintenance Utility Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

SAPI sapi\cli build complete
cl : Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release
php5isapi.c
c:\php-sdk\php53dev\vc9\x64\php5.3\zend\zend_execute.h(234) : warning C4267: 'function' : conversion from 'size_t' to 'int', possibl
oss of data
sapi\isapi\php5isapi.c(286) : warning C4267: '=' : conversion from 'size_t' to 'int', possible loss of data
sapi\isapi\php5isapi.c(300) : warning C4267: '=' : conversion from 'size_t' to 'DWORD', possible loss of data
sapi\isapi\php5isapi.c(789) : warning C4267: '=' : conversion from 'size_t' to 'DWORD', possible loss of data
sapi\isapi\php5isapi.c(791) : warning C4267: '=' : conversion from 'size_t' to 'DWORD', possible loss of data
sapi\isapi\php5isapi.c(863) : warning C4267: 'function' : conversion from 'size_t' to 'uint', possible loss of data
sapi\isapi\php5isapi.c(885) : error C4235: nonstandard extension used : '_asm' keyword not supported on this architecture
sapi\isapi\php5isapi.c(885) : error C2065: 'mov' : undeclared identifier
sapi\isapi\php5isapi.c(885) : error C2146: syntax error : missing ';' before identifier 'lpPage'
sapi\isapi\php5isapi.c(885) : error C2065: 'esp' : undeclared identifier
sapi\isapi\php5isapi.c(905) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
sapi\isapi\php5isapi.c(908) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
sapi\isapi\php5isapi.c(912) : warning C4267: 'function' : conversion from 'size_t' to 'int', possible loss of data
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin\x86_amd64\cl.exe"' : return code '0x2'
Stop.

Isso parece com o problema: "extensão não padrão usada: palavra-chave '_asm' não suportada nesta arquitetura" . Eu suspeito que eu não fiz o suficiente para dizer ao processo de construção para fornecer uma saída de 64 bits, alguém pode sugerir como superar isso?

    
por Neil Trodden 19.08.2010 / 19:13

1 resposta

1

Seu "_asm" refere-se à linguagem assembly embutida no código C.

"Inline assembly is not supported on the Itanium and x64 processors," per http://msdn.microsoft.com/en-us/library/4ks26t93(VS.80).aspx.

Portanto, você não pode simplesmente recompilá-lo; você teria que refazer o código para remover o código de assembly embutido e substituí-lo por instruções em linguagem C. Isso não só seria muito trabalhoso, mas provavelmente desfaria as otimizações de desempenho que foram implementadas usando o código de assembly in-line. Provavelmente, existe uma maneira de usar um montador separado para construir as partes da linguagem assembly e, em seguida, vinculá-las ao projeto, mas isso obviamente seria anos-luz além do nosso domínio sysadmin.

Eu suspeito que esta é a razão pela qual não existe uma compilação oficial de PHP de 64 bits para o Windows. Eu ouvi falar de builds de PHP de 64 bits não oficiais do , mas eles têm a reputação de serem instáveis.

Você já pensou em configurar um pool de aplicativos separado de 32 bits especificamente para PHP? Isso permitiria que você executasse o PHP no modo de compatibilidade de 32 bits sem quebrar seus aplicativos ASP.NET de 64 bits.

    
por 20.08.2010 / 00:51