用C++来编写PHP扩展

  2011-07-10


前面有文章介绍过如何编写一个简单的PHP扩展。简单说,也就下面几步:

  1. 去ext目录用ext_skel生成扩展框架
  2. 去php源文件目录./buildconf –force
  3. 编辑config.m4
  4. 修改extname.c
  5. ./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—