Compilar una extensión de PHP como no segura para subprocesos

Estoy intentando compilar la extensión imagemagick (imagick) para usarla en un entorno no seguro para subprocesos en Windows.

Estoy usando PHP 5.3.10 y he configurado Visual C ++ Express como mi entorno de compilación. El problema es que estoy usando una versión de PHP no segura para subprocesos como un módulo FCGI en Apache 2.2.

Por lo tanto, mi PHP se suministra con unphp5.lib y no unphp5ts.lib. Creo que esta es la razón por la que estoy recibiendo estos errores:

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

Solo he construido y compilado cosas en Linux, así que no estoy muy seguro de cómo hacerlo en un entorno Windows.

¿Cómo puedo compilar la extensión para que no sea segura para subprocesos?

Descargué el binario threadsafe de PHP 5.3.10 para obtener una copia de php5ts.lib. Entonces pude compilar la extensión.

Estoy adivinando que el ajuste de laZTS directiva preprocesador a cualquiera1 o0 haría que la extensión se compile como segura para subprocesos o no segura para subprocesos. (No estoy muy seguro de esto, por lo que si alguien me dijera si esto es correcto o no, sería muy apreciado. :))

Luego configuré una máquina virtual con Windows 7 e instalé la última versión de WAMP. La razón es que utilizó una versión segura de subprocesos de PHP.

Coloqué el dll en la carpeta ext en la instalación de PHP y lo habilité enphp.ini. Sin embargo, incluso después de probar la versión ts y nts en WAMP, obtendría:

<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>

Pero la cosa es quec:/wamp/bin/php/php5.3.10/ext/imagick.dll' existe, y sí lo he comprobado muchas veces.

Luego bajé la versión de ImageMagick a 6.6.2-10-Q16, pero aún veo el mismo problema.

El mismo problema ocurre en mi máquina dev que ejecuta una versión nts de PHP 5.3.10 en Apache 2.2 (todo instalado manualmente).

Parece que podría estar equivocado con respecto a laZTS preprocesador Si pongoZTS=0 y compilar, usando el caminante de dependencias en el dll compilado todavía muestra que requierephp5ts.dll el cual solo está presente en versiones seguras para subprocesos de PHP.

Hice más retoques con el andador de dependencias y descubrí que tenía que vincular estadísticamente a msvc100d.dll. Entonces quitéZTS en la definición de preprocesador y fue capaz de compilar utilizandophp5.lib en lugar dephp5ts.dll. Creo que esto debería conseguirme un dll non-ts.

Sin embargo, al cargar la extensión, todavía estoy recibiendo:

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

Y errores del dependiente caminante:

<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>

Se instaló visual c ++ express 2008 y se compiló usando el toolkit v90 de la plataforma, pero aún enfrentando los mismos problemas.

Cualquier consejo apreciado :)

Solución encontrada! Mira mi respuesta

Respuestas a la pregunta(2)

Su respuesta a la pregunta