2009-06-24 9 views
3

J'ai écrit une extension PHP qui pourrait être compilée et lancée sous linux avec succès. Mais sur les fenêtres, j'ai rencontré quelques problèmes.Compilation de ma propre extension PHP sous Windows avec Visual Studio 2008

J'ai fait la compilation sur Windows selon http://blog.slickedit.com/?p=128 avec la version source PHP 5.2.10, et après la compilation, il a généré le fichier dll. Mais quand j'ai essayé d'utiliser le fichier dll, il m'a signalé les problèmes de mémoire lors du démarrage d'Apache (serveur Wamp). Et puis j'ai commencé le processus de débogage, il semblait que REGISTER_INI_ENTRIES() avait des problèmes.

Voici le code source de l'extension PHP, http://www.bluefly.cn/xsplit.tar.gz, et cela fonctionne très bien sous Linux. Mais je veux aussi le faire fonctionner sur Windows.

Désolé je ne suis pas un pro afin que j'espère que quelqu'un peut m'aider.

Toute aide est appréciée et merci à l'avance ~

+0

Existe-t-il un guide complet pour faire de telles choses sur Windows? –

+0

Désolé. Vous n'avez pas de réponse à vous donner, mais si vous la faites fonctionner, pourriez-vous laisser un très court commentaire sur le gain de performance que vous avez réalisé et sur votre impression générale? THX à l'avance ... – merkuro

+0

@merkuro, ça marche très bien sous Linux et c'est vraiment rapide et fiable (testé temps). Mais je ne sais vraiment pas comment obtenir ce travail sur Windows –

Répondre

2

La raison pour laquelle vous ne voyez pas de problème sous Linux est probablement que vous utilisez un thread safebuild sous Windows, mais pas sous Linux. Essayez d'ajouter --enable-maintainer-zts sur Linux, puis vérifier en utilisant valgrind (USE_ZEND_ALLOC=0 valgrind /usr/bin/php script.php)

D'un rapide glanceover votre code, j'ai vu que vous n'avez pas défini votre php_xsplit_init_globals qui initialisation de variables de thread. fonction tis doit être enregistré de MINIT en ajoutant un

ZEND_INIT_MODULE_GLOBALS(xsplit, php_yplist_init_globals, NULL); 

appel. Peut-être que quelque chose d'autre est faux, mais c'est la première chose que j'ai vue.

2

Wamp est compilé en utilisant VC6 et nécessite votre module être compilé avec VC6. Signalement de Romain Bourdon (auteur de WampServer): Comme Apache est compilé avec VC6, si vous voulez exécuter PHP en tant que module (comme dans WampServer) vous devez compiler le module avec VC6.

Si vous souhaitez compiler votre module avec une plateforme plus récente, vous devez compiler l'ensemble de votre distribution PHP-CGI et l'exécuter en tant que CGI (rapide).

Si vous pouvez lire le français (ou si vous savez utiliser un traducteur), vous pouvez lire this post.

Questions connexes