用C++写php扩展

以下将一个geniatagger的C++代码生成一个.so文件做成一个php扩展。

1.      应用场景

目前有一个用C++写成的词性标注器,以下通过写一个php扩展模块来使得在php中可以用函数的形式来调用C++写的词性标注器。

2.      获取一份php源代码,这里用的版本是php-5.3.19

将源码解压到一个目录,这里放在了phpExtension目录下,如下:

/phpExtension/ php-5.3.19

运行生成的扩展.so的php的版本:

3.      进入到扩展目录

命令:cd /phpExtension/ php-5.3.19/ext

4.      执行创建扩展模块的命令

这里创建了一个名为geniatagger的模块,命令如下:

./ext_skel –extname=geniatagger

5.      执行命令后在当前目录下会生成一个名字为geniatagger的目录

进入geniatagger目录

geniatagger目录下共有8个文件:

我们主要使用的是config.m4、geniatagger.c、php_geniatagger.h这三个文件

6.      编辑配置文件config.m4

这里主要是修改

a)打开10到12行的注释(删除dnl),这里是指增加一个模块

b) 在PHP_NEW_EXTENSION(geniatagger,geniatagger.c, $ext_shared)前增加用于指定这个扩展应用到了c++的命令:

    PHP_REQUIRE_CXX()

c)将PHP_NEW_EXTENSION(geniatagger,geniatagger.c, $ext_shared) 中的 geniatagger.c改成geniatagger.cpp,并将你的扩张中将用到的geniatagger的C++实现中的所有.cpp文件文件名添加到geniatagger.cpp后边,以空格隔开

同时把模块的后缀.c改成.cpp

7. 修改模块头文件

   vimphp_configcenter4.h

a)      对头文件增加extern 标签

b)      增加方法PHP_FUNCTION(postag_by_geniatagger)

c)      增加要使用到的头文件geniatagger.h

d)      增加全局变量声明

7.       修改文件的后缀

8. 修改cpp文件

  a)对头文件增加 extern标签

b)将ZEND_DECLARE_MODULE_GLOBALS(geniatagger)的注释打开

c)增加一个申明PHP_FE(postag_by_geniatagger,   NULL)

e)      增加初始化函数的实现

f)       在初始化接口中使用初始化函数

g)      增加postag_by_geniatagger方法的实现

9. 执行预处理

/usr/local/php/bin/phpize

10. 执行编译配置

./configure--with-php-config=/usr/local/php2/bin/php-config --with-geniatagger

11. 编译

Make

12. 安装

     makeinstall

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值