Сгенерированный SWIG код не запускается на PHP 5.3.2 неопределенный символ: zend_error_noreturn - PullRequest
6 голосов
/ 01 апреля 2010

У меня есть библиотека, которую я успешно использую с PHP 5.1.6 с помощью некоторого кода оболочки, сгенерированного SWIG (v1.3.40).

Я только что обновился до PHP 5.3.2 и вижу следующую ошибку:

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 

В ходе расследования выясняется, что код оболочки, созданный SWIG (myLib_wrap.c), включает в себя вызовы функции PHP: zend_error_noreturn и что эта функция недоступна в PHP 5.3.2?

Кто-нибудь видел эту проблему раньше? Кажется, все работает, если я вручную обновляю сгенерированный код, чтобы вместо вызова zend_error_noreturn он просто вызывал zend_error . Этот подход безопасен?

1 Ответ

6 голосов
/ 16 июня 2010

В PHP недавно произошли изменения, которые определяли символ zend_error_noreturn как псевдоним символа для zend_error при сборке с GCC версии 3 или выше, тогда как ранее он также определял символ, если используя GCC 2.

Псевдоним символа - это просто попытка оптимизации в PHP, которая не дает никакой выгоды, и его действительно должен был отбросить тот, кто недавно пересматривал эту часть движка. В других случаях сборки это просто #defined как zend_error .

Замена zend_error_noreturn вызовов zend_error безопасна.

...