2010-03-31 14 views
6

Ho una libreria che utilizzo con successo con PHP 5.1.6 con l'aiuto di un codice wrapper generato da SWIG (v1.3.40).Il codice generato SWIG non riesce a girare su PHP 5.3.2 simbolo non definito: zend_error_noreturn

Ho appena aggiornato a PHP 5.3.2 e sto vedendo il seguente errore:

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 

Su indagine sembra che il codice wrapper prodotto da SWIG (myLib_wrap.c) include le chiamate alla funzione PHP : zend_error_noreturn e questa funzione non è disponibile in PHP 5.3.2?

Qualcuno ha già visto questo problema prima? Le cose sembrano funzionare se aggiorno manualmente il codice generato in modo che invece di chiamare zend_error_noreturn si chiami semplicemente zend_error. Questo approccio è sicuro?

risposta

6

PHP ha avuto un cambiamento di recente che solo definito il simbolo zend_error_noreturn come alias simbolo per zend_error se costruire con GCC versione 3 o superiore, mentre in precedenza aveva anche definito il simbolo se si utilizza GCC 2.

L'alias del simbolo è solo un tentativo di ottimizzazione in PHP che non offre alcun beneficio, e in realtà avrebbe dovuto essere abbandonato da chiunque avesse rivisitato quella parte del motore di recente. In altri casi di build è solo #definito come zend_error.

Sostituzione zend_error_noreturn chiamate da zend_error è sicuro.

+0

Grazie analogico – user44538

Problemi correlati