2010-03-31 8 views
6

J'ai une bibliothèque que j'ai utilisée avec succès avec PHP 5.1.6 à l'aide d'un code wrapper généré par (v1.3.40).Le code généré par SWIG ne fonctionne pas sur PHP 5.3.2 Symbole indéfini: zend_error_noreturn

Je viens de mise à niveau vers PHP 5.3.2 et je vois l'erreur suivante:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php/modules/myLib_php.so' - /usr/lib/php/modules/myLib_php.so: undefined symbol: zend_error_noreturn in Unknown on line 0 

Sur enquête, il apparaît que le code d'emballage produit par SWIG (myLib_wrap.c) inclut les appels à la fonction PHP : zend_error_noreturn et que cette fonction n'est pas disponible en PHP 5.3.2?

Quelqu'un at-il déjà vu ce problème? Les choses semblent fonctionner si je mets à jour manuellement le code généré de sorte qu'au lieu d'appeler zend_error_noreturn, il appelle simplement zend_error. Cette approche est-elle sûre?

Répondre

6

PHP avait changé récemment que seulement défini le zend_error_noreturn symbole comme un alias de symbole pour zend_error si la construction avec la version de GCC 3 ou plus, alors qu'il avait également défini précédemment le symbole si vous utilisez GCC 2.

L'alias de symbole est juste une tentative d'optimisation en PHP qui n'offre aucun avantage, et il aurait dû être abandonné par quiconque ayant récemment revu cette partie du moteur. Dans d'autres cas de construction, il est juste défini comme zend_error.

Remplacement zend_error_noreturn appels par zend_error est sûr.

+0

Merci analogique – user44538