Компиляция расширения PHP как не поточно-ориентированного

Я пытаюсь скомпилировать расширение imagemagick (imagick) для использования в среде, не поддерживающей потоки в Windows.

Я использую PHP 5.3.10 и настроил Visual C ++ express в качестве среды компиляции. Проблема в том, что я использую не-поточно-ориентированную версию PHP в качестве модуля FCGI в Apache 2.2.

Таким образом, мой PHP поставляется сphp5.lib и неphp5ts.lib, Я считаю, что это причина, почему я получаю эти ошибки:

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

Я только когда-либо собирал и компилировал вещи на Linux, так что я не слишком уверен, как это сделать в среде Windows.

Как я могу скомпилировать расширение, чтобы оно не было поточно-ориентированным?

Я загрузил потокобезопасный двоичный файл PHP 5.3.10, чтобы получить копию php5ts.lib. Затем я смог скомпилировать расширение.

Я предполагаю, что установкаZTS директива препроцессора либо1 или же0 приведет к тому, что расширение будет скомпилировано как поточно-безопасное или не поточно-безопасное. (Не слишком уверен в этом, поэтому, если кто-то может сообщить мне, если это правильно или нет, это будет высоко ценится. :))

Затем я настроил виртуальную машину под управлением Windows 7 и установил последнюю версию WAMP. Причина в том, что он использовал многопоточную версию PHP.

Я поместил DLL в папку ext в установке PHP и включил его вphp.ini, Однако даже после того, как я попробовал обе версии ts и nts в WAMP, я получил бы:

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

Но дело в том, чтоc:/wamp/bin/php/php5.3.10/ext/imagick.dll' существует, и да, я проверял это много раз.

Затем я понизил ImageMagick до 6.6.2-10-Q16, но все еще вижу ту же проблему.

Та же проблема возникает на моем компьютере разработчика, использующем версию PHP 5.3.10 nts на Apache 2.2 (все устанавливаются вручную).

Похоже, я могу ошибаться в отношенииZTS препроцессор. Если я установлюZTS=0 и скомпилировать, используя обходчик зависимостей на скомпилированном dll, все еще показывает, что это требуетphp5ts.dll который присутствует только в многопоточных версиях PHP.

Я проделал большую работу с обходчиком зависимостей и обнаружил, что мне нужно было статистически ссылаться на msvc100d.dll. Я тогда удалилZTS в определении препроцессора и был в состоянии скомпилировать с помощьюphp5.lib вместоphp5ts.dll, Я думаю, что это должно заставить меня не-дц.

Однако при загрузке расширения я по-прежнему получаю:

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

И ошибки от ходунков зависимостей:

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

Установлен Visual C ++ Express 2008 и скомпилирован с использованием инструментария платформы v90, но все еще сталкивается с теми же проблемами.

Любые советы приветствуются :)

Solution Found! See my answer.

Ответы на вопрос(2)

Ваш ответ на вопрос