Compilare la mia estensione PHP su Windows con Visual Studio 2008
-
10-07-2019 - |
Domanda
Ho scritto un'estensione PHP e potrebbe essere compilata ed eseguita con successo su Linux. Ma su Windows ho riscontrato alcuni problemi.
Ho eseguito la compilazione su Windows secondo http://blog.slickedit.com/?p = 128 con la versione 5.2.10 di PHP e dopo la compilazione ha generato il file dll. Ma quando ho provato ad usare il file dll, mi ha segnalato i problemi di memoria all'avvio di Apache (server Wamp). E poi ho iniziato il processo di debug, sembrava che REGISTER_INI_ENTRIES () avesse dei problemi.
Ecco il codice sorgente dell'estensione PHP, http://www.bluefly.cn/xsplit .tar.gz e funziona bene su Linux. Ma voglio anche farlo funzionare su Windows.
Scusa se non sono un professionista, quindi spero che qualcuno mi possa aiutare.
Qualsiasi aiuto è apprezzato e grazie in anticipo ~
Soluzione
Il motivo per cui non si riscontra un problema su Linux è molto probabile che si stia eseguendo un thread safebuild su Windows, ma non su Linux. Prova ad aggiungere --enable-maintainer-zts
su Linux e poi controlla usando valgrind ( USE_ZEND_ALLOC = 0 valgrind / usr / bin / php script.php
)
Da una rapida occhiata al tuo codice ho visto che non hai definito il tuo php_xsplit_init_globals
che ha inizializzato le variabili del thread. Questa funzione deve essere registrata da MINIT
aggiungendo un
ZEND_INIT_MODULE_GLOBALS(xsplit, php_yplist_init_globals, NULL);
chiamata. Forse qualcos'altro non va, ma questa è la prima cosa che ho visto.
Altri suggerimenti
Wamp è compilato usando VC6 e richiede che il modulo sia compilato con VC6.
Segnalazione di parole di Romain Bourdon (autore di WampServer): poiché Apache è compilato con VC6, se si desidera eseguire PHP come modulo (come in WampServer) è necessario compilare il modulo con VC6.
Se si desidera compilare il modulo con una piattaforma più recente, è necessario compilare l'intera distribuzione PHP-CGI ed eseguirlo come (veloce-) CGI.
Se sai leggere il francese (o se sai come usare un traduttore) puoi leggere questo post .