有没有人见过这个问题?如果我手动更新生成的代码,而不是调用 zend_error_noreturn,它只是调用 zend_error,事情似乎可以工作.这种方法安全吗? 解决方案 PHP 最近进行了更改,仅将 zend_error_noreturn 符号定义为 zend_error 的符号别名,如果构建使用 GCC 版本 3 或更高版本,而以前它也定义了使用 GCC 2 的符号.符号别名只是 PHP 中的一种优化尝试,没有任何好处,而且最近重新访问引擎的那部分的人真的应该放弃它.在其他构建案例中,它只是 #defined 为 zend_error.用 zend_error 替换 zend_error_noreturn 调用是安全的.I have a library that I have been using successfully with PHP 5.1.6 with the help of some wrapper code generated by SWIG (v1.3.40).I have just upgraded to PHP 5.3.2 and I am seeing the following 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 0On investigation it appears that the wrapper code produced by SWIG (myLib_wrap.c) includes calls to the PHP function: zend_error_noreturn and that this function isn't available in PHP 5.3.2?Has anyone seen this issue before?Things seem to work if I manually update the generated code so that instead of calling zend_error_noreturn it just calls zend_error. Is this approach safe? 解决方案 PHP had a change recently that only defined the zend_error_noreturn symbol as a symbol alias for zend_error if building with GCC version 3 or greater, whereas previously it had also defined the symbol if using GCC 2.The symbol alias is just an optimisation attempt in PHP that offers no benefit whatsoever, and it should really have been dropped by whoever had revisited that part of the engine recently. In other build cases it's just #defined as zend_error.Replacing zend_error_noreturn calls by zend_error is safe. 这篇关于SWIG 生成的代码无法在 PHP 5.3.2 未定义符号上运行:zend_error_noreturn的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!