SWIG生成的代码无法在PHP 5.3.2未定义的符号上运行:zend_error_noreturn

use*_*538 6 php swig zend-framework

我有一个库,我已经成功地使用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 
Run Code Online (Sandbox Code Playgroud)

经过调查,似乎由SWIG(myLib_wrap.c)生成的包装器代码包含对PHP函数的调用:zend_error_noreturn并且PHP 5.3.2中没有此函数?

有没有人见过这个问题?事情似乎工作,如果我手动更新生成的代码,这样,而不是调用的zend_error_noreturn 它只是调用zend_error.这种方法安全吗?

ana*_*gue 6

PHP有最近,只有定义的变化zend_error_noreturn符号作为一个符号别名zend_error如果与GCC版本3或更大的大楼,而以前如果使用GCC 2它也定义的符号.

符号别名只是PHP中的优化尝试,没有任何好处,并且最近应该重新访问引擎的那部分的人应该放弃它.在其他构建案例中,它只是#defined为zend_error.

更换zend_error_noreturn通过电话zend_error是安全的.