报错解决:ubuntu 20.04 编译安装tengine 2.2.3报错this statement may fall through[-Werror=implicit-fallthrough=]

ubuntu 20.04 编译安装 tengine 2.2.3 报错  all warnings being treated as errors

前言: 由于项目里头用到了tengine,但是自己对tengine的启动,反向代理的配置,端口代理,负载均衡等这些属性配置等都不了解,这段时间就来补补这方面的课,学习一项技术的最快方法就是跟着官方文档编译--安装--配置来一遍,这样能够对项目结构,模块组成有一个起码的了解,安装完成后剩下的就是按照官方文档解释把常用配置试验与实践啦,接下来再结合项目中的一些配置理解实际用途.

1.首先编译环境介绍  这次编译安装我下载的版本是 tengine 2.2.3, make 编译器版本为 GNU Make 4.2.1,ssl模块版本是:openssl-1.0.0
2.具体出错截图
执行make命令报错时具体截图

3.错误解决过程
首先在google上搜到了一位前辈在编译其他项目时也遇到了类似的错:前辈遇到的编译报错
综合问题回答来看:大概意思是说在高版本的GCC编译器认为开发人员可能没有意识到警告可能导致的后果,于是就在编译选项中加入了:Werror 该选项的默认值是将警告也当作错误处理以提醒开发人员.要解决此编译警告报错只需要在执行make命令时加入额外参数CFLAGS即可 :

make CFLAGS='-Wno-implicit-fallthrough'

参考连接:
CSDN 前辈的错误经验
GCC项目组的官方ISSUE解答

本来解决到这里本来以为已经问题结束了,可是谁知道后面的过程中又出现了新的问题 -_-!
新错误截图如下:
解决编译器警告错误后出现的新问题
根据错误描述在编译src/os/unix/ngx_user.c文件输出objs/src/os/unix/ngx_user.o文件时出的错:好吧我们去看看源文件里头是啥(这里只截取到了前50行内容,感兴趣的同学可以私下里看看完整内容)

#ifdef __GLIBC__
    /* work around the glibc bug ,奇怪的地方在这里,源码里头貌似标明了这个地方在glibc
     环境下会出现bug,我们注释掉这一行再编译试试*/
    cd.current_salt[0] = ~salt[0]; 
#endif

    value = crypt_r((char *) key, (char *) salt, &cd);

    if (value) {
        len = ngx_strlen(value) + 1;

        *encrypted = ngx_pnalloc(pool, len);
        if (*encrypted == NULL) {
            return NGX_ERROR;
        }

        ngx_memcpy(*encrypted, value, len);
        return NGX_OK;
    }

    ngx_log_error(NGX_LOG_CRIT, pool->log, ngx_errno, "crypt_r() failed");

    return NGX_ERROR;
}

改完源文件后我们继续执行

 make CFLAGS='-Wno-implicit-fallthrough'  && make install

顺利执行完成后会在终端中看到类似以下的输出就编译安装完成了:),生成的可执行文件默认存放在/usr/local/nginx 目录下.

make[1]: 离开目录“/opt/soft/tengine-2.2.3”
make -f objs/Makefile manpage
make[1]: 进入目录“/opt/soft/tengine-2.2.3”
sed -e "s|%%PREFIX%%|/usr/local/nginx|" \
	-e "s|%%PID_PATH%%|/usr/local/nginx/logs/nginx.pid|" \
	-e "s|%%CONF_PATH%%|/usr/local/nginx/conf/nginx.conf|" \
	-e "s|%%ERROR_LOG_PATH%%|/usr/local/nginx/logs/error.log|" \
	< man/nginx.8 > objs/nginx.8
make[1]: 离开目录“/opt/soft/tengine-2.2.3”

以上解决办法参考至:未定义解决办法

至此,此次的编译安装之旅就告一段落啦!

小提醒:

此次我使用的tengine 版本是2.2.3,电脑中的openssl版本是1.0.0 ,在2.2.2版本中若是使用openssl1.1.0模块进行编译会报其他指针引用类型的错误,这是tengine2.2.2 版本与高版本的openssl 不兼容导致的.在此给各位小伙伴提个醒,使用时一定要注意版本哦.issue描述详情请参见issue#1066问题描述 .

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值