升级导读:
最近在安装swoole时,出现一下错误
/usr/include/php/Zend/zend_operators.h: In function 'void fast_long_increment_function(zval*)':
/usr/include/php/Zend/zend_operators.h:446:68: error: '__builtin_saddl_overflow' was not declared in this scope
if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
^
/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_decrement_function(zval*)':
/usr/include/php/Zend/zend_operators.h:500:68: error: '__builtin_ssubl_overflow' was not declared in this scope
if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) {
^
/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_add_function(zval*, zval*, zval*)':
/usr/include/php/Zend/zend_operators.h:554:80: error: '__builtin_saddl_overflow' was not declared in this scope
if (UNEXPECTED(__builtin_saddl_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)
^
/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_coro.lo] 错误 1
错误思考:
错误原因有可能是我的
php
安装方式导致的,初期我的php
是通过yum install php
安装的,所以在编译swoole
扩展时出现了上述的错
解决思考:
如果是
yum
安装问题,那么直接卸载,然后重新在php官网下载进行”编译安装“,然后进行swoole
扩展处理,就不在出现这些错误,这样也应该可以啊,后来网上找了很多答案,最终都说gcc
版本不够,根据官方的要求如下:
php-7.0 或更高版本
gcc-4.8 或更高版本
make
autoconf
pcre (CentOS系统可以执行命令:yum install pcre-devel)
默认情况下,CentOS 7.2预装的gcc版本是4.8.x,我的版本是4.8.5,按照要求是够了,那为什么报错了,按照思路,要么卸载重新编译,要么升级
升级步骤:
1. 下载gcc-7.2.0或者其他版本
可以去GCC官方镜像站点下载,获取其他地方下载也可以(建议下载本地再上传,镜像都是国外的,太慢)
wget http://www.netgull.com/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.gz
2. 解压gcc-7.2.0
tar -xvf gcc-7.2.0.tar.gz
3. 进入到gcc-7.2.0,安装依赖,通常包含三个依赖:
cd gcc-7.2.0
./contrib/download_prerequisites
会下载三个依赖,当然也可以直接下载:
gmp-6.1.0.tar.gz
mpfr-3.1.4.tar.gz
mpc-1.0.3.tar.gz
4. 创建一个build目录,并进入到这个build目录
mkdir build
cd build
5. 开始build 并安装
这个make后面有个-j4参数,这个是指定编译时并发的数量,当然这个值最好设定为你机器的核数的倍数,2倍核数应该可以,再高可能会影响速度
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib && make -j 4 && make install
6. 测试版本
gcc --version
g++ --version
7. 可以查看gcc命令当前安装的位置:
which gcc
whereis gcc