Ubuntu16.04下交叉编译适配openwrt(CC版本)的swoole扩展库(swoole-1.10.3)

网友投稿 772 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)

文章目录

​​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小时内删除侵权内容。

上一篇:Windows上的Linux容器
下一篇:微服务监测的五大原则
相关文章

 发表评论

暂时没有评论,来抢沙发吧~