2010-09-04 7 views
3

Après avoir compilé ma propre extension PHP en utilisant VC9 (2008) et VC10 (2010) en utilisant les étapes suivantes:Compiler une extension php avec Visual Studio 2008, MODULE ID ne correspond pas avec php

http://blog.slickedit.com/2007/09/creating-a-php-5-extension-with-visual-c-2005/

Je reçois l'erreur suivante lors de l'initialisation php:

PHP Warning: PHP Startup: FirstPHPExt Module: Unable to initialize module 
Module compiled with build ID=API20090626,TS 
PHP compiled with build ID=API20090626,TS,VC9 
These options need to match 
in Unknown on line 0 

Pourquoi il ne dit pas que je compilé le module avec VC9?

Plus d'info:

Système d'exploitation: Windows 7 64 bits PHP: 5.3.3, TS, VC9

Répondre

9

Ok, j'ai trouvé la solution:

Vous devez ajouter une constante préprocesseur en php -src/Zend/zend_build.h:

#define PHP_COMPILER_ID "VC9" 

Et cela fonctionnera.


Solution trouvée ici: http://forums.zend.com/viewtopic.php?f=55&t=2045

+0

Dans votre cas c'était la version du compilateur, mais notez que parfois l'un des autres segments de l'ID de construction peut être le problème. Si l'API est différente, vous avez compilé avec une autre version de PHP (incompatible) que celle à laquelle vous déployez l'extension. Enfin, si TS/NTS ne correspond pas, vous devez soit définir, soit annuler la définition du préprocesseur 'ZTS' dans votre projet extenstion pour qu'il corresponde à celui de PHP. (TS = Thread-Safe, NTS = Non-Thread-Safe). –

2

La documentation officielle pour la construction de PHP et des extensions est dans le wiki.

Vous devez créer un fichier config.w32 sur votre poste et le générer via la ligne de commande. C'est la méthode officiellement supportée.

0

Et il est fortement recommandé d'utiliser le même CRT (VC9) que PHP lui-même. Il existe des problèmes connus lorsque des CRT mixtes sont utilisés entre Apache, PHP ou ses extensions.

+0

C'est vrai, mais sous VS2010 vous pouvez lier contre vc9 crt. Il vaut la peine d'essayer – Stef

+0

Est-ce seulement une option d'interface utilisateur ou existe-t-il des options d'éditeur de liens pour le faire? Je ne peux pas trouver le doc sur les drapeaux possibles à vc10 pour lier contre vc9 crt. – Pierre

+0

Dans "Propriétés" de votre projet, "Propriétés de configuration", Général, vous devez changer "Platform Toolset" – Stef

Questions connexes