Compilando uma extensão PHP como não-thread-safe

Eu estou tentando compilar a extensão imagemagick (imagick) para usar em um ambiente não thread-safe no windows.

Estou usando o PHP 5.3.10 e configurei o Visual C ++ express como meu ambiente de compilação. O problema é que eu estou usando uma versão não-thread-safe do PHP como um módulo FCGI no Apache 2.2.

Assim, meu PHP é fornecido com umphp5.lib e não umphp5ts.lib. Eu acredito que esta é a razão pela qual estou recebendo esses erros:

<code>imagick.obj : error LNK2019: unresolved external symbol __imp__tsrm_mutex_alloc referenced in function _zm_startup_imagick
</code>

Eu só construí e compilei coisas no linux, então não tenho certeza de como fazer isso em um ambiente Windows.

Como posso compilar a extensão para que ela não seja thread-safe?

Eu baixei o binário thread-safe do PHP 5.3.10 para obter uma cópia do php5ts.lib. Eu fui então capaz de compilar a extensão.

Eu estou supondo que definir oZTS diretiva de pré-processamento para1 ou0 faria com que a extensão fosse compilada como thread-safe ou não-thread-safe. (Não tenho certeza sobre isso, então se alguém puder me informar se isso está correto ou não, seria muito apreciado. :))

Em seguida, configurei uma máquina virtual executando o Windows 7 e instalei a versão mais recente do WAMP. Razão é que ele usou uma versão thread-safe do PHP.

Coloquei a dll na pasta ext na instalação do PHP e habilitei emphp.ini. No entanto, mesmo depois de tentar a versão ts e nts no WAMP, eu recebia:

<code>PHP Warning:  PHP Startup: Unable to load dynamic library 'c:/wamp/bin/php/php5.3.10/ext/imagick.dll' - The specified module could not be found.
 in Unknown on line 0
</code>

Mas a coisa é quec:/wamp/bin/php/php5.3.10/ext/imagick.dll' existe, e sim eu verifiquei isso muitas vezes.

Eu então rebaixei o ImageMagick para 6.6.2-10-Q16, mas ainda vejo o mesmo problema.

O mesmo problema ocorre na minha máquina dev executando uma versão nts do PHP 5.3.10 no Apache 2.2 (todos instalados manualmente).

Parece que eu posso estar errado sobre oZTS pré-processador. Se eu definirZTS=0 e compilar, usando walker dependência na dll compilada ainda mostra que requerphp5ts.dll que está presente apenas nas versões thread-safe do PHP.

Eu fiz mais mexer com walker dependência e descobri que eu tinha que link para estatisticamente msvc100d.dll. Então eu removiZTS na definição do pré-processador e foi capaz de compilar usandophp5.lib ao invés dephp5ts.dll. Eu acho que isso deve me dar um não-ts dll.

No entanto, ao carregar a extensão, ainda estou recebendo:

<code>PHP Warning:  PHP Startup: Invalid library (maybe not a PHP library) 'imagick.dll' in Unknown on line 0
</code>

E erros do walker de dependência:

<code>Error: At least one module has an unresolved import due to a missing export function in an implicitly dependent module.
Error: Modules with different CPU types were found.
Warning: At least one delay-load dependency module was not found.
Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
</code>

Instalado visual c ++ express 2008 e compilado usando o toolkit de plataforma v90, mas ainda enfrentando os mesmos problemas.

Alguma dica apreciada :)

Solução encontrada! Veja minha resposta.

questionAnswers(2)

yourAnswerToTheQuestion