Назад | Перейти на главную страницу

Как я могу исправить эту ошибку, пытаясь собрать php для 64-битной системы Windows?

Мне нужно запустить php на веб-сайте на нашем 64-разрядном сервере Windows 2003, и хотя php предлагает 32-разрядные двоичные файлы для Windows, в настоящее время они не предлагают 64-разрядные.

Я не могу переключить IIS 6 на запуск 32-битных приложений, так как он останавливает работу всех остальных моих сайтов asp.net.

Я пытаюсь собрать php из исходного кода для 64-битной цели, следуя этому руководству: http://wiki.php.net/internals/windows/stepbystepbuild

Я использовал командное окно среды сборки Windows SDK для его создания и начал с ввода команды:

setenv /x64 /xp /release

..установить цель сборки "Ориентация на ОС Windows XP x64 RELEASE"

Я выдал строку конфигурации:

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

Это приводит к сбою во время сборки (все будет нормально, если я опущу --enable-isapi, чего я не хочу делать):

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.

Это похоже на проблему: "использовано нестандартное расширение: ключевое слово '_asm' не поддерживается в этой архитектуре". Я подозреваю, что я недостаточно сделал, чтобы сообщить процессу сборки о необходимости вывода 64-битных данных, может ли кто-нибудь предложить, как это преодолеть?

Ваш "_asm" относится к встроенному языку ассемблера, встроенному в код C.

«Встроенная сборка не поддерживается процессорами Itanium и x64», согласно http://msdn.microsoft.com/en-us/library/4ks26t93(VS.80).aspx.

Следовательно, вы не можете просто перекомпилировать его; вам придется переработать код, чтобы удалить встроенный код сборки и заменить его инструкциями на языке C. Это не только потребует много работы, но и, вероятно, приведет к отмене оптимизации производительности, реализованной с использованием встроенного кода сборки. Вероятно, есть способ использовать отдельный ассемблер для создания частей на языке ассемблера, а затем связать их с проектом, но это, очевидно, будет на несколько световых лет за пределами области наших системных администраторов.

Я подозреваю, что именно по этой причине не существует официальной 64-битной сборки PHP для Windows. Я слышал о неофициальный 64-битные сборки PHP для Windows, но они считаются нестабильными.

Думали ли вы о создании отдельного 32-битного пула приложений специально для PHP? Это позволит вам запускать PHP в 32-битном режиме совместимости без нарушения работы ваших 64-битных приложений ASP.NET.