经验分享:linux 下 制作PHP扩展出现的问题 Module compiled with module API=20090626

11 篇文章 0 订阅
4 篇文章 0 订阅
制作出.so 文件后,php -v 出现下面的提示

PHP Warning:  PHP Startup: checkcode: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20131226
These options need to match
 in Unknown on line 0
PHP Warning:  PHP Startup: taint: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20131226
These options need to match
 in Unknown on line 0
PHP 5.6.10 (cli) (built: Jul  2 2015 13:26:19)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

在网上 http://www.th7.cn/Program/php/201408/253791.shtml 看到说是 debug和release 的问题,很是怀疑。
猜测:应该是运行的php和实现的插件版本不统一的问题
但是是在php源代码基础上构建的插件,问题出现在哪里呢?

使用idapro 分析 so文件发现  20090626 在so文件内,那就说明被什么文件带入了so文件中,在生成的插件框架文件中 .c 找不到这个串的定义,一定处在include 文件中,那么在哪里?


原来:机器上有php,后来下载源码编译,然后产生插件。是否这个插件的编译使用了原php的头文件呢?
:在Makefile中发现
INCLUDES = -I/usr/include/php -I/usr/include/php/main -I/usr/include/php/TSRM -I/usr/include/php/Zend -I/usr/include/php/ext -I/usr/include/php/ext/date/lib
使用的的确是原来安装的php版本

20090626 这个串在 Zend_modules.h 中
/usr/include/php/Zend 这个目录下
定义为:
#define ZEND_MODULE_API_NO 20090626
而在源码中:
#define ZEND_MODULE_API_NO 20131226

正因为此,所以php和它的插件不配对,不能初始化
附:

#define PHP_5_0_X_API_NO        220040412
#define PHP_5_1_X_API_NO        220051025
#define PHP_5_2_X_API_NO        220060519
#define PHP_5_3_X_API_NO        220090626
#define PHP_5_4_X_API_NO        220100525
#define PHP_5_5_X_API_NO        220121212
#define PHP_5_6_X_API_NO        220131226


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值