编译安装libiconv报错./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)

阿豪运维笔记(阿豪同学) 2021-02-22 1.6 K阅读

温馨提示:这篇文章已超过646天没有更新,请注意相关的内容是否还可用!

In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
 ^
Makefile:914: recipe for target 'progname.o' failed
make[2]: *** [progname.o] Error 1
make[2]: Leaving directory '/usr/local/src/libiconv-1.14/srclib'
Makefile:865: recipe for target 'all' failed
make[1]: *** [all] Error 2
make[1]: Leaving directory '/usr/local/src/libiconv-1.14/srclib'
Makefile:33: recipe for target 'all' failed
make: *** [all] Error 2

image.png

解决办法

1、编辑源码包目录下的stdio.in.h文件

# vi /usr/local/src/libiconv-1.14/srclib/stdio.in.h

通过关键字 gets 找到

/* It is very rare that the developer ever has full control of stdin,
   so any use of gets warrants an unconditional warning.  Assume it is
   always declared, since it is required by C89.  */
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

image.png

修改添加如下代码,如下图

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

image.png

或者直接删除

/* It is very rare that the developer ever has full control of stdin,
   so any use of gets warrants an unconditional warning.  Assume it is
   always declared, since it is required by C89.  */
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

替换成

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

然后重新make && make install,问题解决。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作有参考学习价值
喜欢请点击上方【分享】,如果对您有帮助可点击上方【打赏】打赏本站。谢谢大家对阿豪运维笔记的支持。

文章作者: 阿豪运维笔记(阿豪同学)
本文链接:
文章版权:站长码字很辛苦,除非注明,否则均为阿豪运维笔记原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码