【swoole-安装】源码方式

本文详细介绍了在CentOS 7.2环境下,使用PHP 7.2及GCC 4.8进行Swoole扩展的安装与配置过程。解决了一系列编译错误,包括找不到phpize、configure错误、缺少php-config等问题,并最终成功编译和安装Swoole。最后,文章提到了如何修改php.ini文件启用Swoole扩展,以及重启php-fpm服务。

参考:https://www.w3cschool.cn/swoole/swoole-install.html

centos7.2 \php7.2 \ gcc4.8 

下载源码地址:

下载源代码包后,在终端进入源码目录,执行下面的命令进行编译和安装

cd swoole
phpize
./configure
make 
sudo make install

 

注意:我这里提示phpize不存在。 参考:https://blog.youkuaiyun.com/weixin_38674371/article/details/84714696

 

因为我的php安装在/usr/local/php72这个目录下,所以找不到phpize

我这边是写的绝对路径执行的/usr/local/php72/bin/phpize

 

然后./configure的时候提示  

configure: error: C++ preprocessor "/lib/cpp" fails sanity check

 

解决方案:yum install glibc-headers
yum install gcc-c++

参考:https://blog.youkuaiyun.com/qq_21119513/article/details/80459508

 

还报错没有php-config

解决方案是在./configure后面带上php-config路径

像这样:./configure --with-php-config=/usr/local/php72/bin/php-config

 

至此没有障碍了,编译成功!

 

编译成功后需要修改php.ini,加入extension=swoole.so

 

之后重启php-fpm

 

(注:swoole的./configure有很多额外参数,可以通过./configure --help命令查看,这里仅开启其中async-mysql项,其他均选择默认项) 这里是./configure编译配置的额外参数,用于开启某些特性

1.8.7或更高版本不再需要设置--enable-async-mysql和--enable-async-httpclient,async_mysql和async_httpclient改为内置
--enable-swoole-debug
打开调试日志,开启此选项后swoole将打印各类细节的调试日志。生产环境不要启用。
--enable-sockets
增加对sockets资源的支持,依赖sockets扩展。开启此参数,swoole_event_add就可以添加sockets扩展创建的连接到swoole的事件循环中。
--enable-async-mysql
增加异步mysql支持, 依赖mysqli和mysqlnd扩展。
--enable-async-redis
增加异步Redis客户端支持, 依赖hiredis库
--enable-async-httpclient
增加异步Http和WebSocket客户端支持
--enable-ringbuffer
开启RingBuffer内存池
此设置为试验性质,主要用于提升性能,生产环境请不要开启
--enable-openssl
启用SSL支持

编译 Swoole 扩展时遇到 `configure failed` 错误,通常与环境依赖、配置参数兼容性或 MAMP 的特殊路径设置有关。以下是一些常见的原因及解决方法: ### 检查 PHP 版本与 Swoole 的兼容性 PHP 8.1.13 属于较新版本,而某些 Swoole 功能模块(如 `swoole_thread` 或 `iouring`)可能尚未完全适配该版本的 Zend 引擎特性或内存管理机制。建议确认当前使用的 Swoole 版本是否支持 PHP 8.1,特别是启用 `enable-swoole-thread` `enable-iouring` 等实验性选项时[^1]。 可以尝试使用稳定版本的 Swoole(例如 v4.8.x 或 v5.0.x),并确保从官方 GitHub 仓库克隆源码后切换到对应分支或标签: ```bash git clone https://github.com/swoole/swoole-src.git cd swoole-src git checkout v5.0.0 ``` ### 配置参数冲突或依赖缺失 启用多个扩展选项(如 `--enable-sockets`, `--enable-swoole-curl`, `--enable-swoole-pgsql`, `--enable-brotli`, `--enable-zstd`, `--enable-swoole-thread`, `--enable-iouring`)可能导致依赖库未正确安装或配置冲突。例如: - `--enable-swoole-pgsql` 需要 PostgreSQL 开发库(如 `libpq-dev`) - `--enable-brotli` `--enable-zstd` 分别需要 Brotli Zstandard 库的头文件开发包 - `--enable-swoole-thread` 要求系统支持 pthread,并且部分函数签名可能与 PHP 8.1 不兼容 - `--enable-iouring` 需要 Linux 内核版本 >= 5.1 及 liburing 开发库 请检查系统中是否已安装这些依赖库,并根据提示修正配置命令。 ### MAMP 环境下的路径问题 MAMP 使用的是自定义的 PHP 安装路径,而非系统默认路径。因此,在配置 Swoole 时必须明确指定 MAMP 的 PHP 配置工具 `phpize` `php-config`,否则会导致头文件路径错误或编译器参数不匹配。例如: ```bash export PATH=/Applications/MAMP/bin/php/php8.1.13/bin:$PATH /Applications/MAMP/bin/php/php8.1.13/bin/phpize ./configure --with-php-config=/Applications/MAMP/bin/php/php8.1.13/bin/php-config \ --enable-sockets \ --enable-swoole-curl \ --enable-swoole-pgsql \ --enable-brotli \ --enable-zstd \ --enable-swoole-thread \ --enable-iouring make clean && make && sudo make install ``` 此外,MAMP 的 PHP 构建可能缺少某些默认扩展头文件(如 `ext/sockets` 或 `ext/curl`),需手动安装相关开发包或复制头文件。 ### 编译日志分析 若上述步骤未能解决问题,应查看详细的 `config.log` 文件以定位具体失败原因。该文件通常位于 Swoole 源码目录下,其中会记录 configure 脚本执行期间的错误信息,包括缺失的头文件、链接失败的符号等关键线索。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值