从 0 开始编译安装 swoole 示例

官方文档:https://wiki.swoole.com/wiki/page/6.html

Swoole扩展是按照PHP标准扩展构建的。使用phpize来生成编译检测脚本,./configure来做编译配置检测,make进行编译,make install进行安装。
上面所说都是编译 php 扩展的通用过程。

# 下载 release 版本 #
# 注意:在国内下载 github 的资源,有时候不稳定,可以用迅雷等下载工具在本机下载好,再通过 SFTP 传到服务器 #
cd /usr/local/src
wget https://github.com/swoole/swoole-src/archive/master.tar.gz

# 解压、进入目录 #
tar xzvf swoole-src-master.tar.gz
cd swoole-src-master

# 生成编译检测脚本、配置检查、编译安装 #
# phpize、php-config 请使用你自己的路径 #
/www/server/php/72/bin/phpize && \
./configure --with-php-config=/www/server/php/72/bin/php-config \
--enable-coroutine --enable-openssl  \
--enable-http2  \
--enable-async-redis \
--enable-sockets \
--enable-mysqlnd && \
make clean && make && sudo make install

精简默认安装

/www/server/php/72/bin/phpize && \
./configure --with-php-config=/www/server/php/72/bin/php-config && \
make clean && make && sudo make install

如果上述步骤顺利的话,就会有 Build complete 输出:

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files:          /www/server/php/72/include/php/

cd /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/ 就能找到 swoole.so 文件了

修改 php.ini 文件,将 swoole.so 加载进去

[swoole]
extension = /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718/swoole.so

通过 php -m | grep swoole 来查看是否成功加载了swoole

相关错误

编译安装swoole报错 Enable http2 support, require nghttp2 library.

swoole安装异步redis –enable-async-redis出错 hiredis/hiredis.h: No such file or directory 解决方法

swoole安装异步redis –enable-async-redis出错 hiredis/hiredis.h: No such file or directory 解决方法

在安装 swoole 异步redis,会带上这个选项

--enable-async-redis

编译过程中会有下列报错产生:

hiredis/hiredis.h: No such file or directory

这个原因是没有安装 hiredis 导致。

解决办法 安装 hiredis:

cd /usr/local/src

# 安装之前看一下github,如果有新版本,就安装新的 #
wget https://github.com/redis/hiredis/archive/v0.14.0.tar.gz
mv v0.14.0.tar.gz hiredis-0.14.0.tar.gz
tar xzvf hiredis-0.14.0.tar.gz
cd hiredis-0.14.0
make && make install

# 在底部添加这行环境变量 #
vim /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

source /etc/profile

OK,到这里就安装完成了,重新编译 swoole 即可。

编译安装swoole报错 "Enable http2 support, require nghttp2 library."

安装swoole时, 因为现在搭建环境的时候不会涉及到http2.0, 所以不会安装对应的依赖包, 会报出类似以下错误:

In file included from /root/build/swoole-src-master/swoole.c:16:0:
/root/build/swoole-src-master/php_swoole.h:143:2: error: #error "Enable http2 support, require nghttp2 library."
 #error "Enable http2 support, require nghttp2 library."

解决方法 安装 nghttp2:

# 如果 github 上有新版本的就下载安装新版的 #
wget https://github.com/nghttp2/nghttp2/releases/download/v1.34.0/nghttp2-1.34.0.tar.gz
tar zxvf nghttp2-1.34.0.tar.gz
cd nghttp2-1.34.0
./configure
make && make install

安装好 nghttp2,再次编译安装 swoole 即可。