前面有文章介绍过如何编写一个简单的PHP扩展。简单说,也就下面几步:
- 去ext目录用ext_skel生成扩展框架
- 去php源文件目录./buildconf –force
- 编辑config.m4
- 修改extname.c
- ./configure && make && make install
本文介绍下如何在扩展编写过程中,使用C++。
读到这里,如果你还不知道GNU m4或phpize,建议参阅下相关资料。简而言之,GNU m4是一个用于生成文件的宏处理器。这里的phpize是调用了GNU m4来生成configure文件以及其他相关文件。Configure则是生成Makefile的一个bash脚本。
PHP扩展默认使用C语言来完成编码。若想使用C++,需要对config.m4文件做出相应修改。
PHP_REQUIRE_CXX()
PHP_ADD_LIBRARY_WITH_PATH(tlib, $LIB_EXPORT_PATH, WANGGOU_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(library_sys, $LIB_EXPORT_PATH, WANGGOU_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(library_util, $LIB_EXPORT_PATH, WANGGOU_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(ip_pool, $LIB_EXPORT_PATH, WANGGOU_SHARED_LIBADD)
PHP_SUBST(WANGGOU_SHARED_LIBADD)
PHP_ADD_LIBRARY(stdc++, 1, WANGGOU_SHARED_LIBADD)
PHP_ADD_INCLUDE($INC_EXPORT_PATH)
PHP_ADD_INCLUDE($EXT_PROTOCOL_PATH)
PHP_NEW_EXTENSION(wanggou, wanggou.cpp, $ext_shared)
说明:
上述宏的第一句,表明了该扩展需要使用CXX编译器。
接下来四行,添加扩展中依赖的库,也就是 –Lpath/to/lib –lsomelib 段的内容。
接下来添加C++标准库。
下来两行是头文件包含的目录配置。
最后一行表明源代码文件的名字是以.cpp结尾。需要自己重命名自动生成的wanggou.c。
接下来就是编码了,像平常一样include头文件,修改完文件,直接make来测试。
祝你成功!
–EOF—