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

2023-11-16

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程序的过程,可以加快项目开发进度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • openwrt下crontab定时任务实现

    openwrt下crontab定时任务实现 我的需求是需要加个定时执行脚本来监控智能网关运行的进程 一旦网关进程异常关闭 就能立即把它拉起来 从而保证网关运行的可靠性 这里我们用到了crontab服务 OpenWRT系统默认已经加入了cro
  • [OpenWrt] Flash 由4M改8M(或者16M), openwrt源码的修改

    http www right com cn forum thread 75309 1 1 html trunk tools firmware utils src mktplinkfw c 只修改fw max len为0xfc0000 16M
  • ubuntu18.04编译Openwrt出现的问题解决

    ubuntu18 04编译Openwrt出现的问题解决 问题1 Build dependency Please install Git git core gt 1 6 5 问题2 gdate c 2497 7 error format no
  • openwrt squashfs固件解包打包与签名方法

    我们有时没有时间重新编译整个固件 但是却又想修改其中的某个功能 这时就涉及到了固件的解包与打包 下面提供一个简单的解包打包脚本 openwrt固件修改 squashfs jffs2格式固件 bin sh sudo echo Starting
  • openwrt之initramfs-kernel

    在下载openwrt系统时 经常能看到initramfs kernel bin squashfs factory bin squashfs sysupgrade bin等结尾的文件 factory适用于从原厂系统刷到openwrt sysu
  • UCI常用说明

    UCI常用函数说明 结构体 API函数 参考文章 安装完成后在 加粗样式 usr local include 目录下存放UCI h文件可以进行参考 结构体 1 struct uci package 包结构体 它对应一个配置文件内容 stru
  • OpenWrt系统配置UCI

    UCI简介 UCI Unified Configuration Interface 是 Openwrt 中的统一配置接口 官方文档参考 每一个程序的配置文件都保存在 etc config 目录 可以通过文本编辑器 uci 一个可执行程序 以
  • 703n无法进入路由管理界面reset无效重刷方法

    现在没法接网线获取不到地址 winscp也登不了 请问除了ttl线外不拆机能重刷吗 安全模式恢复 具体方法如下 网线连接电脑和703n 设置电脑ip地址为192 168 1 2 掩码默认 网关192 168 1 1 电脑 gt 开始 gt
  • OpenWRT编译错误:Package missing dependencies for the following libraries

    发现问题 今天在 OpenWRT 上增加了个 package 编译的时候 报出如下错误 Package test modules is missing dependencies for the following libraries lib
  • 从零开始学习OpenWrt完美教程

    Cisco Linksys在2003年发布了WRT54G这款无线路由器 同年有人发现它的OS是基于Linux的 然而Linux是基于GPL许可证发布的 按照该许可证Cisco应该把WRT54G 的OS的源代码公开 2003年3月 Cisco
  • openwrt x86 版安装纪实

    1 下载源码 已有编译环境 直接在ubuntu 中 git openwrt 源码 https dev openwrt org wiki GetSource git clone b chaos calmer git github com op
  • openwrt路由器-timeout while waiting for PADS.

    最近使用openwrt路由器进行PPPoE拨号的时候 经常出现 远程服务器无响应 的错误 log打印日志如下 pppoe Timeout waiting for PADS packets Unable to complete PPPoE D
  • 【硬创邦】跟hoowa学做智能路由(七):路由联网

    2014 05 16 17 32 原创 孙冰 1条评论 这一章hoowa将向各位介绍Openwrt下基本路由功能的配置方法 通过本章学习大家将了解如何设置OpenWRT来使路由连接网络 讲解将通过命令行模式 在系列教程中 hoowa不会教大
  • OpenWrt系统无法进入Luci解决办法之一

    当在OpenWrt系统重启后 打开Luci后台时有时可能会遇到以下错误报告 usr lib lua luci dispatcher lua 577 bad argument 1 to pairs table expected got nil
  • 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 一 简
  • openwrt路由器(RP-LINK)安装python并设置开机启动程序

    由于项目需求 实际条件限制 需要在某台设备上运行一个python小程序 在工业机器人和云服务器之间实现信息转发的功能 因为机器人也需要通过路由器认证连接校园网 出于简化设备的考虑 不想每次跑程序还得开电脑 我决定尝试在路由器上运行这个程序
  • 红米ac2100 刷openwrt以及刷回记录

    redmiac2100 刷机 参考 手动升级漏洞固件 https wwx lanzoux com i6iqxhqp98f 或者百度网盘链接 https pan baidu com s 1H355Ym9p TLrVOux2w2b7Q 提取码
  • openwrt设置定时重启(天/周/月)

    1 进入openwrt管理页面 找到 系统 计划任务 编辑命令行 点击 保存 2 系统 启动项 中找到cron 确认状态为 开启 点击 重启 使计划生效 或重启系统 说明 一定要设置延时 防止无限重启 每天凌晨1点45分 延时70秒后自动重
  • UCI提供给shell和lua使用的配置接口

    转自 http m blog csdn net article details id 47989493 1 uci提供给shell使用的配置借口有两套 1 config get用来读取一个config值 命令格式如下 config getv
  • 如何知道我的二进制可执行文件的内存占用量

    我想知道是否有办法知道用 C 语言编码的二进制可执行文件的内存占用量 有关二进制可执行文件的信息 使用OpenWrt分支 Attitude Adjustment 的工具链编译 架构为x86 在 Linux Unix 系统上 您可以使用siz

随机推荐