Estoy intentando compilar la extensión imagemagick (imagick) para usar en un entorno no seguro para subprocesos en windows.Compilación de una extensión PHP como no segura para subprocesos
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 un php5.lib
y no un php5ts.lib
. Creo que esta es la razón por la que estoy recibiendo estos errores:
imagick.obj : error LNK2019: unresolved external symbol __imp__tsrm_mutex_alloc referenced in function _zm_startup_imagick
solamente he construido y compilado cosas en Linux, así que no estoy muy seguro de cómo hacer esto en un entorno de ventanas.
¿Cómo puedo compilar la extensión para que no sea segura para subprocesos?
he descargado el binario de PHP 5.3.10-hilo para obtener una copia de php5ts.lib. Pude entonces compilar la extensión.
que supongo que la fijación de la directiva ZTS
preprocesador para cualquiera 1
o 0
causaría la extensión para compilar, ya sea para las hebras o no multi-hilo. (No estoy seguro de esto, así que si alguien me puede decir 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 usó una versión de PHP en condiciones de subprocesos.
Coloqué el dll en la carpeta ext en la instalación de PHP y lo habilité en php.ini
. Sin embargo, incluso después de haber utilizado la versión SC y SNC en WAMP, me sale:
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
Pero la cosa es que sí existe c:/wamp/bin/php/php5.3.10/ext/imagick.dll'
, y sí he comprobado esto muchas veces.
Luego, degradé ImageMagick a 6.6.2-10-Q16, pero igual veo el mismo problema.
El mismo problema se produce en mi máquina dev ejecutando 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 la ZTS
preprocesador. Si configuro ZTS=0
y lo compilo, el uso de la función de dependencia en la DLL compilada todavía muestra que requiere php5ts.dll
, que solo está presente en las versiones de PHP con seguridad de subprocesos.
lo hice más retoques con Dependency Walker y se encontró que tenía que estadísticamente las enlace a msvc100d.dll. Luego eliminé ZTS
en la definición del preprocesador y pude compilar usando php5.lib
en lugar de php5ts.dll
. Creo que esto debería conseguirme un dll no ts.
Sin embargo, cuando se carga la extensión, todavía estoy recibiendo:
PHP Warning: PHP Startup: Invalid library (maybe not a PHP library) 'imagick.dll' in Unknown on line 0
y los errores de la dependencia Walker:
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.
Instalado Visual C++ Express 2008 y compilado usando v90 plataforma conjunto de herramientas , pero aún enfrenta los mismos problemas.
Algún consejo apreciado :)
pregunta de serverfault.com. – Raptor