2010-03-31 6 views
6

Tengo una biblioteca que he estado utilizando satisfactoriamente con PHP 5.1.6 con la ayuda de algún código contenedor generado por SWIG (v1.3.40).El código generado SWIG no se ejecuta en PHP 5.3.2 Símbolo indefinido: zend_error_noreturn

acabo de actualizar a PHP 5.3.2 y estoy viendo el siguiente error:

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 

En la investigación parece que el código de contenedor producido por el TRAGO (myLib_wrap.c) incluye llamadas a la función de PHP : zend_error_noreturn y que esta función no está disponible en PHP 5.3.2?

¿Alguien ha visto este problema antes? Parece que las cosas funcionan si actualizo manualmente el código generado para que en lugar de llamar al zend_error_noreturn llame a zend_error. ¿Este enfoque es seguro?

Respuesta

6

PHP tuvo un cambio recientemente que sólo se define el símbolo zend_error_noreturn como un alias de símbolo para zend_error si la construcción con la versión GCC 3 o mayor, mientras que anteriormente también había definido el símbolo si se utiliza GCC 2.

El alias de símbolo es solo un intento de optimización en PHP que no ofrece ningún beneficio en absoluto, y realmente debería haber sido descartado por quien haya revisado esa parte del motor recientemente. En otros casos de compilación, es #defined como zend_error.

Sustitución zend_error_noreturn llamadas por zend_error es seguro.

+0

Gracias analogue – user44538

Cuestiones relacionadas