Kompilieren einer PHP-Erweiterung als nicht threadsicher

Ich versuche, die imagemagick (imagick) -Erweiterung zu kompilieren, um sie in einer nicht threadsicheren Umgebung unter Windows zu verwenden.

Ich verwende PHP 5.3.10 und habe Visual C ++ Express als meine Kompilierungsumgebung eingerichtet. Das Problem ist, dass ich eine nicht thread-sichere Version von PHP als FCGI-Modul in Apache 2.2 verwende.

Somit wird mein PHP mit einemphp5.lib und nicht aphp5ts.lib. Ich glaube, dies ist der Grund, warum ich diese Fehler erhalte:

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

Ich habe bisher nur Dinge unter Linux erstellt und kompiliert, daher bin ich mir nicht sicher, wie ich das in einer Windows-Umgebung machen soll.

Wie kann ich die Erweiterung so kompilieren, dass sie nicht threadsicher ist?

Ich habe die threadsafe-Binärdatei von PHP 5.3.10 heruntergeladen, um eine Kopie von php5ts.lib zu erhalten. Ich konnte dann die Erweiterung kompilieren.

Ich vermute, dass die EinstellungZTS Präprozessor-Direktive entweder1 oder0 würde dazu führen, dass die Erweiterung entweder als threadsicher oder als nicht threadsicher kompiliert wird. (Da ich mir nicht sicher bin, würde ich mich sehr freuen, wenn mir jemand mitteilen könnte, ob dies korrekt ist oder nicht. :))

Ich habe dann eine virtuelle Maschine unter Windows 7 eingerichtet und die neueste Version von WAMP installiert. Grund dafür ist die Verwendung einer threadsicheren Version von PHP.

Ich habe die DLL im ext-Ordner in der PHP-Installation abgelegt und aktiviertphp.ini. Aber selbst nachdem ich sowohl die ts- als auch die nts-Version in WAMP ausprobiert habe, würde ich Folgendes bekommen:

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

Aber das ist die Sachec:/wamp/bin/php/php5.3.10/ext/imagick.dll' gibt es, und ja, ich habe dies oft überprüft.

Ich habe dann ImageMagick auf 6.6.2-10-Q16 heruntergestuft, sehe aber immer noch das gleiche Problem.

Dasselbe Problem tritt auf meinem Dev-Rechner auf, auf dem eine nts-Version von PHP 5.3.10 unter Apache 2.2 ausgeführt wird (alle manuell installiert).

Sieht so aus, als könnte ich mich in Bezug auf das irrenZTS Präprozessor. Wenn ich setzeZTS=0 und kompilieren mit Abhängigkeit Walker auf der kompilierten DLL zeigt immer noch, dass es erforderlich istphp5ts.dll Das gibt es nur in threadsicheren Versionen von PHP.

Ich bastelte mehr an Abhängigkeits-Walker und stellte fest, dass ich mich statistisch mit msvc100d.dll verknüpfen musste. Ich habe dann entferntZTS in der Präprozessor-Definition und konnte mit kompilierenphp5.lib anstattphp5ts.dll. Ich denke das sollte mir eine non-ts dll besorgen.

Beim Laden der Erweiterung erhalte ich jedoch weiterhin:

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

Und Fehler von Dependency Walker:

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

Installiert Visual C ++ Express 2008 und kompiliert mit Platform Toolkit V90, aber immer noch mit den gleichen Problemen konfrontiert.

Irgendwelche Tipps geschätzt :)

Lösung gefunden! Siehe meine Antwort.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage