洞察在数字化转型过程中,信创推动企业有效整合资源,实现低成本、高效率的跨平台小程序运营。
876
2022-11-18
Ubuntu16.04下交叉编译适配openwrt(CC版本)的swoole扩展库(swoole-1.10.3)
Ubuntu16.04下交叉编译适配openwrt(CC版本)的swoole扩展库(swoole-1.10.3)
文章目录
Ubuntu16.04下交叉编译适配openwrt(CC版本)的swoole扩展库(swoole-1.10.3)
一、简介二、准备三、编译及安装
1.交叉编译pcre(非必须,我这里就不缺pcre)
(1)解压、创建安装文件夹(2)configure(3)make(4)make install
2.交叉编译swoole
(1)解压、phpize(2)configure(3)make(4)make install
3.配置swoole库到openwrt开发板
(1)复制swoole.so到PHP的库文件安装路径下(2)添加swoole.ini文件(3)可能需要修改php.ini文件(4)运行测试
四、最后
一、简介
在开发websocket版本的PHP客户端时,初期测试是可行的,但是服务器端的websocket服务器程序不仅要和openwrt下的php-websocket-client建立连接,还要和网页端建立连接,等到用户量和网关量增加后,其服务器程序的并发性能要求会随之增加,所以,我们的服务器端程序使用了PHP的高级网络框架swoole,随之而来的问题就是运行在openwrt网关上的php-websocket-client也需要使用swoole库提供的客户端才行,而由于swoole扩展库在openwrt的安装源上是没有的,所以需要我们自己交叉编译swoole的源码进行该扩展库的安装,而swoole虽然是国人开发,但是官网给的mipsel架构下安装方式只有交叉编译几个大字,因此,交叉编译安装swoole扩展库只有自己摸索,所幸找到了正确的方向,交叉编译PHP,然后利用php-config和phpize来交叉编译安装swoole源码,填了很多坑之后PHP总算交叉编译完成了,在“Ubuntu16.04下交叉编译适配openwrt(CC版本)的PHP源码(php-5.6.17)总结”总结中有详细的说明,接下来就是借助交叉编译安装好的PHP来交叉编译安装swoole库了。
二、准备
交叉编译安装好openwrt对应版本的PHP到Ubuntu上; -pcre库源码。swoole库需要借助于pcre库:-swoole源码:zxvf pcre-8.32.tzr.gz
cd pcre-8.32/
mkdir mipselpcre
(2)configure
CC=mipsel-openwrt-linux-uclibc-gcc ./configure --host=mipsel-openwrt-linux --prefix=/home/ubuntu/php-src-php-5.6.17/pcre-8.32/mipselpcre/
…
(3)make
…
(4)make install
…
2.交叉编译swoole
(1)解压、phpize
…
cd swoole-src-1.10.3/
swoole会安装到PHP中,所以即使指定了安装位置也无用。
使用交叉编译的PHP的bin目录下phpize:
(2)configure
不要掉参数–with-php-config:
CC=mipsel-openwrt-linux-uclibc-gcc AR=mipsel-openwrt-linux-uclibc-ar LD=mipsel-openwrt-linux-uclibc-ld RANLIB=mipsel-openwrt-linux-uclibc-ranlib STRIP=mipsel-openwrt-linux-uclibc-strip ./configure --host=mipsel-openwrt-linux-uclibc --with-php-config=/home/ubuntu/php-src-php-5.6.17/php-5.6.17/mipselPHP5.6.17/bin/php-config
。。。
这里基本不会报错。
(3)make
因为swoole是纯c写的,所以这里生成的so文件是c的库文件,然后你下一步安装就会将la和so结合生成PHP的so库安装到你连接的PHP扩展中。
(4)make install
安装成功了,只要你的交叉编译的PHP没有安装在需要权限的位置,一般make install是不需要权限的。
常见错误:
显示Permission denied xxxxxxxx,在交叉编译时(前提是你交叉编译安装的PHP目录不需要root权限)出现这种错误就是你在configure时没有指定php-config造成的,默认使用的Ubuntu系统下安装的PHP的php-config文件了,前面configure和make都没有报错但并不代表没有错误。如果你直接按照字面理解以为是没有权限,加上sudo的话会将swoole.so安装到你Ubuntu的php目录下,结果就是你将swoole.so拷贝到开发板后运行出现Unable to initialize module的错误或者swoole相关的函数还是无法使用,如下:
3.配置swoole库到openwrt开发板
(1)复制swoole.so到PHP的库文件安装路径下
使用scp协议将交叉编译的php中安装的swoole.so拷贝到开发板的扩展库安装目录下,我这里为/usr/lib/php/:
注意一点:如果你这个目录下存在swoole.so,先删掉,再传输,否则可能替换失效。
(2)添加swoole.ini文件
这里需要添加swoole.ini文件到/etc/php5/文件夹下,你可以发现很多扩展库的ini文件:
如果没有这个ini文件,即使你将so文件拷贝到上面的位置,扩展库也不会生效。
内容仿照其它扩展库即可,只需要加入:extensinotallow=swoole.so
(3)可能需要修改php.ini文件
extension_dir="/usr/lib/php/"
有时候这句话前面会有分号,有的话就去掉该分号。
(4)运行测试
调用swoole函数成功了,我这里swoole的服务器暂时没开,写一个swoole函数进行简单测试即可。
四、最后
swoole是一个套壳c的PHP扩展库,是作为一个高级网络框架来使用的,使得PHP借助于c实现了多线程、高并发。对于基于websocket、TCP、HTTP等通信协议的通信服务器、客户端开发很有帮助,少了写底层c程序的过程,可以加快项目开发进度。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~