使用ubuntu12.04开发环境
一、修改config文件
config.m4文件是编译基础中最核心的文件,这个文件主要用于autoconfi来产生configure配置文件,继而自动生成makefile文件。
1. 生成扩展模块框架
#./ext_skel --extname=ext_name
2. 修改config.m4文件
这里有几个重要的宏命令如下:
dnl 是注释;
php_arg_with或者php_arg_enable指定了php扩展模块的工作方式,前者意味着不需要第三方库,后者正好相反;
php_require_cxx 用于指定这个扩展用到了c++;
php_add_include 指定php扩展模块用到的头文件目录;
php_check_library 指定php扩展模块php_add_library_with_pah定义以及库连接错误信息等;
php_add_library(stdc++, , extern_name_libadd) 用于标准c++库链接进入扩展;
php_subst(extern_name_shared_libadd) 用于说明这个扩展编译成动态库的形式;
php_new_extension 用于指定哪些源文件应该被编译,文件与文件之间用空格隔开;
ext_skel 默认生成的模块框架是针对c的,我们要使用c++进行php扩展。那除以上的php_require_cxx, php_add_library两个宏
必需外,还要把ext_name.c改名为ext_name.cpp
修改类似
php_require_cxx()includes=”$includes `mysql_config –cflags`”php_add_library(stdc++, “”, extra_ldflags)extra_ldflags=”$extra_ldflags `mysql_config –libs` -lmemcached”ac_check_headers([mysql/mysql.h])cppfile=”ext_name.cpp antiforbitword.cpp antibasedict.cpp trie.cpp logger.cpp antiencodeconverter.cpp strnormalize.cpp”php_new_extension(ext_name, $cppfile, $ext_shared)
二、修改.h文件
这里指修改php_ext_name.h这个文件。
由于tsrm.h这个文件所包含的函数和类都是用纯c语言写的,故应该使用extern来说明如下:
extern “c” {#ifdef zts#include “tsrm.h”#endif}
如果php_ext_name.h文件或ext_name.cpp文件用到了c++中的一些容器或函数,则需要在头文件中包含相应的头文件。
三、修改.cpp文件
这里指修改ext_name.cpp这个文件
由于config.h、php.h、php.ini和ext/standard/info.h中包含的函数和类如tsrm.h一样,都是用纯c语言写的,所以都要用extern说明。
extern “c” {#ifdef have_config_h#include “config.h”#endif#include “php.h”#include “php_ini.h”#include “ext/standard/info.h”}
另外zend_get_module这个宏命令也需要特别声明。#ifdef compile_dl_ext_namebegin_extern_c()zend_get_module(ext_name)end_extern_c()#endif
四、编译安装扩展库#phpize
#./configure
#make
#make install
参考文章:http://www.blogjava.net/xiaomage234/archive/2009/08/31/293353.html