升级gcc版本为:7.2.0
https://blog.csdn.net/guo_lei_lamant/article/details/79591986 centos7升级GCC4.8.5到GCC4.9.0
https://blog.csdn.net/lanwilliam/article/details/77893033 CentOS 6通过yum安装gcc 4.9 5.2等高版本gcc [此处好使]
https://blog.csdn.net/chenjia6605/article/details/82757568 CentOS7 编译安装GCC 8.2.0
原因:安装swoole扩展时出现---> error "GCC 4.8 or later required
// 一下方式可以忽略,实验失败
1.wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-7.2.0/gcc-7.2.0.tar.gz && tar -zxvf gcc-7.2.0.tar.gz && cd gcc-7.2.0
2../contrib/download_prerequisites
如果不成功可以手动下载依赖
yum install gmp-devel // 編譯依賴此庫
yum install mpfr-devel // 編譯依賴此庫
yum install libmpc-devel // 編譯依賴此庫
当然以上库可以在ftp://gcc.gnu.org/pub/gcc/infrastructure/下载
下载isl-0.18.tar.bz2 // yum 没有这个库源码安装
wget ftp://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2
tar -jxvf isl-0.18.tar.bz2
cd isl-0.18
./configure
make
make install
建立一个目录供编译出的文件存放
mkdir gcc-build-7.3.0 && cd gcc-build-7.3.0
yum groupinstall "Development Tools"
yum -y install glibc-static libstdc++-static
(这两个是必要的开发环境)
../configure --prefix=/usr/local/gcc7 --enable-languages=c,c++,go --disable-multilib // 指定gcc7安裝地址,指定所需安裝語言,不支持32位
make -j4
(-j4选项是make对多核处理器的优化,如果不成功请使用
make,相关优化选项可以移步至参考文献[2]。建议不要使用make -j来编译,虽然可以缩短编译时间,但极大可能会编译失败) 过程很慢
make install
((安装需要root权限!))
查看版本
[root@local usr]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
Target: x86_64-pc-linux-gnu
Configured with: ../configure --prefix=/usr/local/gcc7 --enable-languages=c,c++,go --disable-multilib
Thread model: posix
gcc version 7.2.0 (GCC)
2、安装依赖包
isl-0.16.1.tar.bz2
gmp-6.1.0.tar.bz2
mpfr-3.1.4.tar.bz2
mpc-1.0.3.tar.bz2
依赖包下载地址:ftp://gcc.gnu.org/pub/gcc/infrastructure/
Swoole 4.1.1 安装
- 下载swoole源码
git clone https://gitee.com/swoole/swoole.git
2.编译
cd swoole && phpize
==> 生成configure 文件
./configure --with-php-config=/usr/local/php/bin/php-config
--with-php-config 后面的地址,根据自己的环境,替换为正确的地址
出现:configure: error: C compiler cannot create executables
在这之前我做了export CFLAGS+=-g和 export CFLAGS+=-g3
这样的一系列操作,然后才开始执行 ./configure,结果就出现了上面的错误提示。而我记得之前也执行了 exprot CFLAGS=-g然后执行./configure 是没有问题的。很是奇怪,去网上搜了一下,说是CFLAGS影响了./configure的执行,然后使用 export CFLAGS= 来清除CFLAGS,重新赋值 export CFLAGS=-g,之后再执行./configure就没有问题了。
make && make install
[root@local swoole]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
Installing header files: /usr/local/php/include/php/
[root@local swoole]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20170718/
opcache.a opcache.so redis.so swoole.so
将 swoole.so 再php.ini
中配置好,然后重启 php-fmp
php -m
查看列表是否已经有swoole
或者php --ri swoole
也可以直接这样用
安装 hireids 让 swoole 支持 异步redis
wget https://github.com/redis/hiredis/archive/v0.14.0.tar.gz && tar -zxvf v0.14.0.tar.gz && cd hiredis-0.14.0/ && make -j && make install && ldconfig
重新编译swoole
./configure --with-php-config=/usr/local/php/bin/php-config --enable-swoole-debug --enable-async-redis && make clean && make && make install
可能遇到的问题
php-m
发现swoole或者消失的英文通过php --ri swoole
没有显示async redis client
或redis client
vi ~/.bash_profile
在最后一行添加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source ~/.bash_profile
重新编译安装swoole即可
测试脚本
class AysRedis
{
const HOST = '127.0.0.1';
const PORT = 6379;
public $redis_client = null;
function __construct()
{
$this->redis_client = new swoole_redis;
}
/**
* 闭包里不好直接用变量,要用use
* @return bool
*/
public function execute($id, $username)
{
$this->redis_client->connect(self::HOST, self::PORT, function ($redis_client, $result) use ($id, $username) {
if ($result === false) {
var_dump($redis_client->connect_errno, $redis_client->connect_error);
die;
}
var_dump('wawa');
//设置值
$redis_client->set('wawa', time(), function (swoole_redis $redis_client, $result){
//设置是否成功的返回值
var_dump($result);
});
//取值
$redis_client->get('wawa', function (swoole_redis $redis_client, $result){
var_dump($result);
});
//取所有值
$redis_client->keys('*', function (swoole_redis $redis_client, $result){
var_dump($result);
});
//模糊匹配KEY
$redis_client->keys('*l*', function (swoole_redis $redis_client, $result){
var_dump($result);
});
$redis_client->close();
});
return true;
}
}
$ws = new AysRedis();
$result = $ws->execute(1, 'test');
print_r($result.PHP_EOL);
echo 'start:'.PHP_EOL;