SWIG 生成的代码无法在 PHP 5.3.2 未定义符号上运行:zend_error_noreturn [英] SWIG generated code fails to run on PHP 5.3.2 undefined symbol: zend_error_noreturn

查看:27
本文介绍了SWIG 生成的代码无法在 PHP 5.3.2 未定义符号上运行:zend_error_noreturn的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个库,在 生成的一些包装代码的帮助下,我在 PHP 5.1.6 中成功使用了该库SWIG (v1.3.40).

我刚刚升级到 PHP 5.3.2,但看到以下错误:

PHP 警告:PHP 启动:无法加载动态库 '/usr/lib/php/modules/myLib_php.so' -/usr/lib/php/modules/myLib_php.so:未定义符号:zend_error_noreturn in第 0 行未知

经调查,SWIG (myLib_wrap.c) 生成的包装器代码似乎包含对 PHP 函数的调用:zend_error_noreturn 并且该函数在 PHP 5.3.2 中不可用?

有没有人见过这个问题?如果我手动更新生成的代码,而不是调用 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 0 

On 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆