我有一个我在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 。这种方法安全吗?
答案 0 :(得分:6)
PHP最近有一个更改,只是将 zend_error_noreturn 符号定义为 zend_error 的符号别名(如果使用GCC版本3或更高版本构建),而之前它还定义了如果使用GCC 2,则为符号。
符号别名只是PHP中的优化尝试,它没有任何好处,而且最近应该重新访问引擎的那部分的人应该放弃它。在其他构建案例中,它只是#defined为 zend_error 。
通过 zend_error 替换 zend_error_noreturn 来电是安全的。