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

时间:2010-03-31 20:08:18

标签: php zend-framework swig

我有一个我在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 个答案:

答案 0 :(得分:6)

PHP最近有一个更改,只是将 zend_error_noreturn 符号定义为 zend_error 的符号别名(如果使用GCC版本3或更高版本构建),而之前它还定义了如果使用GCC 2,则为符号。

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

通过 zend_error 替换 zend_error_noreturn 来电是安全的。