windows下编译php,在Windows下编译Yaf

昨天大草原同学完成了在VS9下编译PHP-5.2.15和Yaf, 转发给我相关步骤描述.

其实本质上在win32和Linux下编译没什么区别, 都是只要正确设置CFLAGS和LDFLAGS就可以了, 但微软老喜欢搞成配置, 各种各样的配置项, 搞得人郁闷的不行.

特转载于此, 供大家参考.

由于php5.2与php5.3编译不同,本文讲述用vs9环境在php5.2下编译yaf框架。

准备好相关文件

1.Php源代码 http://cn.php.net/get/php-5.2.17.tar.gz/from/this/mirror

2.Php win32文件http://windows.php.net/downloads/releases/php-5.2.17-Win32-VC6-x86.zip

3.Yaf源代码 http://pecl.php.net/get/yaf-2.0.1.tgz

将下载好的文件解压,把yaf文件夹移动到php-source/ext/目录下

vs编译环境设置:

菜单:工具->选项->项目和解决方案->VC目录, 包含php源文件中的:

1.根目录

2.Main目录

3.Zend目录

4.TSRM目录

库文件:

包含php win32文件中的

1.dev目录

然后用vs打开yaf.dsp,选择全部转换

1.选择Release_TS编译方案

2.打开工程属性,删除预处理定义中的 宏:LIBZEND_EXPORTS[1]和ZEND_DEBUG=1删除

3.删除附加依赖项的php5ts_debug.lib

4.MFC的使用选择“在共享dll中使用mfc”

然后选择Release_TS进行编译

警告可以忽略不理

可能遇到的问题:

1.C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sys/stat.inl(44) : error C2466: 不能分配常量大小为0 的数组

解决方法:

在vc的 c:\program files\microsoft visual studio 8\vc\include\malloc.h 文件中找到:

#define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr) ]

将这一行改为:

#ifdef PHP_WIN32

#define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr)?(expr):1 ]

#else

#define _STATIC_ASSERT(expr) typedef char __static_assert_t[ (expr) ]

#endif

2.如果遇到2019连接错误,那么通常是没有删除预处理定义中的宏LIBZEND_EXPORTS,如果还是有少量(1或者2个)2019连接错误,那么是系统找不到lib,多数情况是没有把yaf.vcproject里面节点Release_TS里的Debug_TS替换成Release_TS。

编译出来的dll位于php-source/Release_TS目录下。

完成后,把生成的dll复制到php.ini指定的ext目录下

新增一行:extension=php_yaf.dll

OK,编译完成.

[1] : 转载说明, 如果定义了LIBZEND_EXPORTS, 那么Yaf包含的PHP头文件中的ZEND_API就会被申明为 __declspec(dllexport), 导致无法在链接的时候无法解析符号.

当然,如果你不想自己编译,也可以直接从PECL直接下载yaf的windows dllYaf at PECL.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值