C++实现PHP扩展
来源:互联网 发布:和讯网股票数据接口 编辑:程序博客网 时间:2024/05/22 17:20
使用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”}
#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
- C实现PHP扩展《Cabinet》
- 用C实现PHP扩展类
- 用C扩展php
- php C extension扩展
- C制作php扩展
- php c扩展
- C/C++扩展PHP
- PHP C扩展初探
- PHP C扩展开发
- linux下php实现C/C++扩展编程
- linux下php实现C/C++扩展编程
- linux下php实现C/C++扩展编程
- C实现PHP扩展《Fetch_Url》类数据抓取
- C实现PHP扩展《Image_Tool》图片常用处理工具类
- Ubuntu下编译实现PHP的c扩展
- 扩展实现PHP Benchmark
- C++实现PHP扩展
- 扩展实现php继承
- 世界杯要来了,普及名队战术
- Android 自定义View (二) 进阶
- JS事件归纳总结
- 嵌入式GSM短信息接口的软硬件设计
- wxwidgets中vector的处理图片的用法和总结
- C++实现PHP扩展
- 关于左值与右值--入门学习
- SVN插件 提交代码遇到Unhandled event loop exception No more handles
- 使用Java实现MP3音乐播放器
- 【《Objective-C基础教程 》笔记ch03】(四)OC中的OOP
- 初学者必读:如何学习VC++和C++及其推荐书目和网站
- placeholder支持ie
- biaolianjie
- unity3d NGUI 基础控件及添加监听事件