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

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

一、简介

在开发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库:https://ftp.pcre.org/pub/pcre/
下载swoole源码:https://github.com/swoole/swoole-src/releases
http://pecl.php.net/package/swoole
http://git.oschina.net/swoole/swoole

三、编译及安装

1.交叉编译pcre(非必须,我这里就不缺pcre)

方法和交叉编译PHP源码相同,而且也没有什么坑,直接加上通用的交叉编译参数即可。

(1)解压、创建安装文件夹

tar 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文件拷贝到上面的位置,扩展库也不会生效。
在这里插入图片描述
内容仿照其它扩展库即可,只需要加入:extension=swoole.so
在这里插入图片描述

(3)可能需要修改php.ini文件

在这里插入图片描述
extension_dir="/usr/lib/php/"
有时候这句话前面会有分号,有的话就去掉该分号。
在这里插入图片描述

(4)运行测试

在这里插入图片描述
调用swoole函数成功了,我这里swoole的服务器暂时没开,写一个swoole函数进行简单测试即可。

四、最后

swoole是一个套壳c的PHP扩展库,是作为一个高级网络框架来使用的,使得PHP借助于c实现了多线程、高并发。对于基于websocket、TCP、HTTP等通信协议的通信服务器、客户端开发很有帮助,少了写底层c程序的过程,可以加快项目开发进度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称系统有问题

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值