Linux离线安装Nginx在make时候报错,报错隐式声明函数‘strerrordesc_np’ [-Werror=implicit-function-declaration]

问题描述

离线安装Nginx在make时开始报错,通过日志定位找到可能是因为在我的系统上,编译器无法找到strerrordesc_np函数的声明。最后通过修改 src/os/unix/ngx_errno.c 文件,将 strerrordesc_np 替换为 strerror成功解决。`

[root@Server-nginx-1.27.2]# make
make -f objs/Makefile
make[1]: 进入目录“/shujupan/nginx-1.27.2”
cc -c -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g  -I src/core -I src/event -I src/event/modules -I src/event/quic -I src/os/unix -I /usr -I objs \
	-o objs/src/os/unix/ngx_errno.o \
	src/os/unix/ngx_errno.c
src/os/unix/ngx_errno.c: 在函数‘ngx_strerror’中:
src/os/unix/ngx_errno.c:30:5: 错误:隐式声明函数‘strerrordesc_np’ [-Werror=implicit-function-declaration]
     msg = strerrordesc_np(err);
     ^
src/os/unix/ngx_errno.c:30:9: 错误:赋值时将整数赋给指针,未作类型转换 [-Werror]
     msg = strerrordesc_np(err);
         ^
cc1: all warnings being treated as errors
make[1]: *** [objs/Makefile:682:objs/src/os/unix/ngx_errno.o] 错误 1
make[1]: 离开目录“/shujupan/nginx-1.27.2”
make: *** [Makefile:10:build] 错误 2

原因分析:

strerrordesc_np 是一个特定于某些操作系统(如 BSD 或一些 Linux 发行版)的函数,通常用于获取错误码的描述信息。在我的系统上,编译器无法找到该函数的声明,这可能是因为缺少必要的头文件或者你当前的操作系统不提供这个函数

赋值时将整数赋给指针,未作类型转换:由于 strerrordesc_np 返回的是一个指针类型的值,而编译器报错表明可能没有找到该函数的声明,所以这部分赋值导致类型不匹配错误


解决方案:

strerrordesc_np 是在某些系统中用于错误描述的函数,并不是所有系统都支持。我的修改如下:

修改源代码:在ngx_errno.c文件中,找到调用 strerrordesc_np 的地方,并将其替换为通用的 strerror 函数。通常,strerror 是一个跨平台的替代函数,能够返回错误码的描述

编辑 src/os/unix/ngx_errno.c 文件的第30行

vim src/os/unix/ngx_errno.c

可以将strerrordesc_np其替换为strerror:

//替换前:
msg = strerrordesc_np(err);
//替换后:
msg = strerror(err);

总结:解决问题时候需要通过查看报错日志提示进行问题分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值