centos 环境,如何编译基于 phpx 的 php 扩展项目?
发布于 作者:苏南大叔 来源:程序如此灵动~在编译好phpx
之后,就需要个helloworld
范例了。那么,如何才能编写第一个cpp
版本的php
扩展呢?phpx
扩展编译的步骤流程是怎么样的呢?这就是本文主要讲述的内容。在本文中,苏南大叔讲述:以phpx
自带的cpp_ext
范例为例,如何编译安装phpx
生成的php
扩展。
本文测试环境:centos
+php72
+phpx0.02
+cpp_ext
。
项目背景
本文正常运行的前提是:已经正常安装了phpx
。如果您还没有安装好phpx
,请参考下面这篇文章:
phpx
是swoole
旗下项目,是基于cpp
构建php
扩展的一门新的技术。不过目前来看,发展有些迟缓。如果您已经顺利安装好phpx
,那么就继续阅读本篇文章吧。
在phpx
的源码目录下,有个测试插件叫做cpp_ext
。可以在下面的这个连接中,找到源码:
cpp_ext
一共就四个文件,其中Makefile
是编译脚本,extension.cpp
是主体文件。另外的echo.php
和dump.php
都是用来测试插件是否正常的。
编译流程
如果一切顺利的话,您就可以使用下面这种方式获得cpp_ext.so
文件。不过,这个so
文件和普通的php
扩展的编译,确实有所不同,因为并没有phpize
和./configure
这两个步骤。
cd phpx/examples/cpp_ext
make
sudo make install
修改php.ini
,重启生效
这个步骤是非常的简单了,大家都会使用。
extension = cpp_ext.so
找不到php.ini
的同学,请查看下面这个连接:
查看是否生效
在phpinfo()
的输出中,可以看到cpp_ext
的相关字样。
同时,在命令行下面执行examples/cpp_ext/
下面的两个测试文件的时候,也应该是可以正常输出的。
php echo.php
php dump.php
当然,对于苏南大叔的宝塔下的php72
来说,上边的命令应该是:
/www/server/php/72/bin/php echo.php
/www/server/php/72/bin/php dump.php
编译失败的解决方案php-config
凡事都有例外,如果这个cpp_ext
编译失败了,那么很有可能的原因还是php-config
这个文件。请问问自己,/usr/bin/php-config
文件,是不是个正确的php-config
文件呢?如果不是,该如何修改呢?
错误信息如下:
/bin/sh: php-config: command not found
加载失败的解决方案ldconfig
可能存在的加载错误就是:
Uncaught Error: Call to undefined function cpp_ext
或者:
libphpx.so: cannot open shared object file
如果您没有看到期待的输出,而是看到了错误输出的话,请确认php.ini
是否正确加载,是否已经重启phpfpm
。然后检测下面这个文件的内容,确认ldconfig
是否正确。
vi /etc/ld.so.conf
ldconfig
ldconfig
是用于配置共享header
文件的加载位置的。请确认ld.so.conf
的内容中,存在libphpx.so
文件所在目录(/usr/local/lib/
)。确认存在之后,再执行ldconfig
即可。不出意外的话,就可以正常解析执行cpp_ext
了。
总结
cpp_ext
是否生效,关键因素就两个:一是php-config
,二是ldconfig
。所以,请大家看到报错不要惊慌,仔细检测这两点就基本上是可以的。
更多使用cpp
构建php
模块的经验文字,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。