msgbartop
PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
msgbarbottom

28 Jun 11 在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), 导致无法在链接的时候无法解析符号.


分享到:



Related Posts:

Tags: , ,

16 Responses to “在Windows下编译Yaf”

  1. シャネル時計 ランキング xy |

    ミュウミュウコピー、トリーバーチコピー、バレンシアガコピー、ディオールコピー、
    シャネル時計 ランキング xy http://www.ooobag.com/watch/breitling/index.html

  2. 大眼猫 |

    @ blanke 我也遇到相同的问题, WINDOWS, PHP 5.3.5, APACHE 环境,需要 VC 6 版本的 DLL,哥们可有?

  3. ff |

    在这找,可用:
    http://pecl.php.net/package/yaf

  4. ff |

    这个框架巨坑,在win8上64位的 官网没有一个dll是能加载的…

  5. Anonymous |

    鸟哥,win10上面yaf的dll不好用,phpinfo没有显示。

  6. ccd |

    大神,为何集成环境的php5.3.0没有一个版本可以

  7. blanke |

    @laruence,你好,
    Apache/2.2.17(Win32),(Visual C++ 6.0) PHP/5.3.5,在 http://code.google.com/p/yafphp/downloads/list 里面没有vc6的额,勉强应用 5.3.x(vs9),在phpinfo 里面无法发现yaf模块?求指导额?

  8. laruence |

    @blanke http://pecl.php.net/package/yaf/2.2.9/windows

  9. blanke |

    博主,你好,除了vs编译,还有没有其他可以用于编译的软件啊?诸如已经编译好的?

  10. hwanginsitein |

    没看懂 请将详细点
    工具->选项->项目和解决方案->VC目录,
    是什么

  11. helloweb |

    64位了还是没有,囧死了,搭个虚拟机 好麻烦

  12. komiles |

    http://code.google.com/p/yafphp/downloads/list
    这里的都是支持32位的,有没有支持64位的?
    如果win7电脑要用yaf,该怎么办呢?
    盼回复,谢谢!

  13. Ahu |

    麻烦提供下php_yaf.dll
    环境是win7,nginx
    加载一直报错,nts和zts都试了
    “D:\wnmp\php\ext\php_yaf.dll”的激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.DebugCRT,processorArchitecture=”x86″,publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32″,version=”9.0.21022.8″。

    弹出应用程序: Warning: PHP Startup: Unable to load dynamic library ‘ext\php_yaf.dll’ – 应用程序无法启动,因为应用程序的并行配置不正确。

  14. Jimmyyem1 |

    我的新手想试试Yaf框架性能如何,下载了源码一看都是.c,.h文件,才发现需要编译 ,但是c基础很烂,求大神们谁给个比较具体的安装Yaf框架的文档,共享出来 让更多的人收益
    不胜感激

  15. hbeimf |

    有没有编绎好了可以直接 用的啊,

  16. smices |

    造福人类的好事呀…
    http://code.google.com/p/yafphp/downloads/list
    只是这里的DLL就是TS的… 没NTS的..

Leave a Reply

*