CentOS 7 中安装 Swoole

PECL

PECL是什么

PECL是一个PHP扩展库,提供了一个PHP所有已知扩展的下载和托管目录。 PECL通过pear进行打包和安装。

安装PECL

在CentOS 中使用PECL,要先安装pear

yum install -y php-pear php-devel

使用PECL安装Swoole

官网的安装环境要求:

  • php-7.0 或更高版本
  • gcc-4.8 或更高版本
  • make
  • autoconf
  • pcre (CentOS系统可以执行命令:yum install pcre-devel)

使用PECL,可以一键下载、编译、安装Swoole

pecl install swoole

安装过程中遇到的问题

编译过程中报的错:

/usr/include/php/Zend/zend_portability.h:312:52: note: in definition of macro 'UNEXPECTED'
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
/usr/include/php/Zend/zend_operators.h: In function 'void fast_long_sub_function(zval*, zval*, zval*)':
/usr/include/php/Zend/zend_operators.h:657:80: error: '__builtin_ssubl_overflow' was not declared in this scope
  if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) {
                                                                                ^
/usr/include/php/Zend/zend_portability.h:312:52: note: in definition of macro 'UNEXPECTED'
 # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0)
                                                    ^
make: *** [swoole_async.lo] Error 1
ERROR: `make' failed

网上查阅资料得知,是因为gcc的版本低导致,查询系统gcc版本

gcc -v

得到结果

...
gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)

虽然满足了官网的gcc版本要求,但是仍然编译不通过。yumgcc版本也是4.8,自己编译安装新版本gcc太过麻烦,这里选用 Software Collections 来安装新版本的gcc。

Software Collections(SCL)

SCL是什么

SCL(Software Collections) 是一个Linux系统的软件仓库,包含了多种常用软件的编译版本,它可以让你在系统中同时安装和使用某个软件的不同版本,而不用担心和系统原来安装的软件产生冲突。

SCL项目主页:https://www.softwarecollections.org/

安装SCL

  1. 安装SCL的发布包centos-release-scl
    yum install centos-release-scl
  2. 启用RHSCL yum 源
    yum-config-manager --enable rhel-server-rhscl-7-rpms

利用SCL安装gcc

打开软件查找页面,输入关键词查找。由于gcc是包含在devtoolset中的,所以需要搜索devtoolset。打开最新版软件的页面,按照页面提示执行命令即可:

# 安装软件包
$ sudo yum install devtoolset-7

# 启用软件包
$ scl enable devtoolset-7 bash

启用软件包命令只在当前会话生效,启用成功后,在当前会话窗口执行pecl install swoole,安装就不会再出现上述的问题了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!