在编译好phpx之后,就需要个helloworld范例了。那么,如何才能编写第一个cpp版本的php扩展呢?phpx扩展编译的步骤流程是怎么样的呢?这就是本文主要讲述的内容。在本文中,苏南大叔讲述:以phpx自带的cpp_ext范例为例,如何编译安装phpx生成的php扩展。

苏南大叔:centos 环境,如何编译基于 phpx 的 php 扩展项目? - phpx-cpp-ext
centos 环境,如何编译基于 phpx 的 php 扩展项目?(图8-1)

本文测试环境:centos+php72+phpx0.02+cpp_ext

项目背景

本文正常运行的前提是:已经正常安装了phpx。如果您还没有安装好phpx,请参考下面这篇文章:

phpxswoole旗下项目,是基于cpp构建php扩展的一门新的技术。不过目前来看,发展有些迟缓。如果您已经顺利安装好phpx,那么就继续阅读本篇文章吧。

phpx的源码目录下,有个测试插件叫做cpp_ext。可以在下面的这个连接中,找到源码:

苏南大叔:centos 环境,如何编译基于 phpx 的 php 扩展项目? - cpp-dir
centos 环境,如何编译基于 phpx 的 php 扩展项目?(图8-2)

cpp_ext一共就四个文件,其中Makefile是编译脚本,extension.cpp是主体文件。另外的echo.phpdump.php都是用来测试插件是否正常的。

加载失败的解决方案ldconfig

可能存在的加载错误就是:

Uncaught Error: Call to undefined function cpp_ext

或者:

libphpx.so: cannot open shared object file

苏南大叔:centos 环境,如何编译基于 phpx 的 php 扩展项目? - restart-php-fail
centos 环境,如何编译基于 phpx 的 php 扩展项目?(图8-7)

如果您没有看到期待的输出,而是看到了错误输出的话,请确认php.ini是否正确加载,是否已经重启phpfpm。然后检测下面这个文件的内容,确认ldconfig是否正确。

vi /etc/ld.so.conf
ldconfig

苏南大叔:centos 环境,如何编译基于 phpx 的 php 扩展项目? - error-ldconfig
centos 环境,如何编译基于 phpx 的 php 扩展项目?(图8-8)

ldconfig是用于配置共享header文件的加载位置的。请确认ld.so.conf的内容中,存在libphpx.so文件所在目录(/usr/local/lib/)。确认存在之后,再执行ldconfig即可。不出意外的话,就可以正常解析执行cpp_ext了。

总结

cpp_ext是否生效,关键因素就两个:一是php-config,二是ldconfig。所以,请大家看到报错不要惊慌,仔细检测这两点就基本上是可以的。

更多使用cpp构建php模块的经验文字,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【加群】加入QQ群【175454274】和大家一起讨论这个问题

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   swoole    phpx

本站的忠实读者小伙伴,正在阅读下面这些文章: